2016-10-31 49 views
1

我正在开发一个应用程序,它使用xamarin.forms来播放声音。 对于创建一个接口“IAudioPlayer”DependencyService.Get <>()不起作用

namespace ClassLibrary.AudioPlayer 
{ 
    public interface IAudioPlayer 
    { 
     void PlayAudio(string filename); 
    } 
} 

而在机器人项目中,我遇到这样实现:

using System; 
using Android.Media; 
using Xamarin.Forms; 

[assembly: Dependency(typeof(myApp.Droid.AudioPlayer_Android))] 

namespace myApp.Droid 
{ 
    public class AudioPlayer_Android : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, ClassLibrary.AudioPlayer.IAudioPlayer, AudioTrack.IOnPlaybackPositionUpdateListener 
    { 
     public void PlayAudio(string filename) 
     { 
      var player = new MediaPlayer(); 
      var fd  = global::Android.App.Application.Context.Assets.OpenFd(filename); 

      player.Prepared += (s, e) => 
      { 
       player.Start(); 
      }; 

      player.SetDataSource(fd.FileDescriptor, fd.StartOffset, fd.Length); 
      player.Prepare(); 
     } 

     public void OnMarkerReached(AudioTrack track) 
     { 
      throw new NotImplementedException(); 
     } 

     public void OnPeriodicNotification(AudioTrack track) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

现在,当我打电话DependencyService.Get<ClassLibrary.AudioPlayer.IAudioPlayer>();它打破了,并说“法“ Get'找不到类型'Xamarin.Forms.DependencyService' 当我使用DependencyService.Get<>()与另一个类型(例如本地数据库实现)它工作正常

任何想法我在做什么wr在这里?

回答

3

您的IAudioPlayer的实施是Android Activity。依赖服务将尝试创建它的一个实例 - 可能不是一个好主意。我真的不能解释你的错误,但你应该创建仅使用一个接口的具体实现:

public class MyAndroidPlyer : IAudioPlayer 
{} 

的形式依存服务不仅具有非常基本的功能(可以检查出源here

如果您需要更复杂的东西,还有其他选择,如MvvmLight/SimpleIOC