2016-10-31 21 views
1

xamarin.formsでサウンドを再生するアプリケーションを開発しています。私はDependencyService.Get<ClassLibrary.AudioPlayer.IAudioPlayer>();呼び出すときDependencyService.Get <>()not working

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(); 
     } 
    } 
} 

今それが壊れると、「メソッド 'こう述べています。そのために は、インタフェースのIAudioPlayer "

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

と私は、このような実装が持っているドロイドプロジェクトで作成されますXamarin.Forms.DependencyService 『」型では見られない』取得します。 別のタイプ(例えばローカルDB実装)とDependencyService.Get<>()を使用してイムは、それが正常に動作したとき。

私はWRをやっている任意のアイデアここに?

答えて

3

IAudioPlayerの実装は、Android Activityです。依存関係サービスは、そのインスタンスを作成しようとします。おそらく良い考えではありません。私は本当にあなたが得るエラーを説明することはできませんが、1つのインタフェースのみを使用して具体的な実装を作成する必要があります。

public class MyAndroidPlyer : IAudioPlayer 
{} 

フォーム依存関係サービスのみ

かなり基本的な機能を(あなたがソース hereをチェックアウトすることができます)しています

もっと洗練されたものが必要な場合は、MvvmLight/SimpleIOCのような選択肢があります。

関連する問題