2016-10-31 1 views
1

일부 사운드를 재생하는 데 도움이되는 xamarin.forms로 앱을 개발 중입니다. 이를 위해 는 인터페이스를 만들어 'IAudioPlayer' DependencyService.Get <>() not working

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

그리고 드로이드 프로젝트에 내가 이런 식으로 구현있어

: 내가 DependencyService.Get<ClassLibrary.AudioPlayer.IAudioPlayer>();를 호출 할 때 지금은 휴식 및 ' "방법 말한다

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

을 Xamarin.Forms.DependencyService '. 다른 유형 (예를 들어 지역 DB 구현) 잘 작동과 DependencyService.Get<>()를 사용하여 메신저.

어떤 생각 내가 뭘하고있어 WR'유형에서 찾을 수 없습니다 '하기 여기에?

답변

3

IAudioPlayer의 구현은 Android Activity입니다. 의존성 서비스는 인스턴스를 생성하려고 시도합니다. 아마도 좋은 생각이 아닙니다. 난 정말 당신이 얻을 오류를 설명 할 수 있지만, 당신은 단지 하나의 인터페이스를 사용하는 구체적인 구현을 만들어야합니다

public class MyAndroidPlyer : IAudioPlayer 
{} 

양식 종속성 서비스에만

아주 기본적인 기능을 제공합니다 (당신은 소스 here을 확인하실 수 있습니다)했다

더 정교한 것이 필요한 경우 MvvmLight/SimpleIOC과 같은 대안이 있습니다.