2017-08-10 13 views
0

リソースフォルダに入れたオーディオファイルをオーディオアプリケーションで再生しようとしています。私はこれをガイドとして使用しています。XamarinのResourcesフォルダからバックグラウンドサービスのオーディオファイルを再生

https://developer.xamarin.com/guides/android/application_fundamentals/working_with_audio/

私は私のプロジェクト内のリソース/原料であるmp3を再生しようとしています。

私はあなたの問題は、文字列パラメータが"android.resource://" + PackageName + "/Raw/Test.mp3" 、けれどものフルパスであることを、それを必要であると考えている行の下のコード

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.Media; 
using Android.Content.Res; 


namespace AudioTour 
{ 
    [Service(Exported = false, Name = "com.AudioTour.AudioService")] 
    public class AudioService : Service 
    { 
     private MediaPlayer player; 

     public override void OnCreate() 
     { 
      Console.WriteLine("Audio Service background task created");   
      StartPlayer(); 
     } 

     public void StartPlayer() 
     { 
       player = new MediaPlayer(); 
       player.Reset(); 
       player.SetDataSource("/Resource/Raw/Test.mp3"); // Unhandled Exception is triggered here 
       player.Prepare(); 
       player.Start(); 
     } 

     public override IBinder OnBind(Intent intent) 
     { 
      return null; 
     } 
    } 
} 

答えて

1

の33

Unhandled Exception: 

Java.IO.IOException: setDataSource failed. occurred 

に、この未処理の例外を取得代わりにあなたのプレーヤーにディスクリプタを渡すことをお勧めします。

public void StartPlayer() 
{ 
    try 
    { 
     var player = new MediaPlayer(); 
     var descriptor = _context.Assets.OpenFd("Test.mp3"); 

     player.SetDataSource(descriptor.FileDescriptor, descriptor.StartOffset, descriptor.Length); 
     descriptor.Close(); 

     player.Prepare(); 
     player.Start(); 
    } 
    catch() 
    { 
    } 
}  

この例のサウンドファイルは実際にはルートのAndroidアセットフォルダにあり、リソースではありません。

関連する問題