Reputation: 801
I'm trying to get my audio application to play an audio file I have put in the Resources folder. I'm using this as a guide.
https://developer.xamarin.com/guides/android/application_fundamentals/working_with_audio/
I am trying to play an mp3 which is in Resources/Raw within my project.
I get this Unhandled Exception on line 33
Unhandled Exception:
Java.IO.IOException: setDataSource failed. occurred
of the below code
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;
}
}
}
Upvotes: 0
Views: 906
Reputation: 3251
I believe your issue is the string parameter requires it to be the full path of "android.resource://" + PackageName + "/Raw/Test.mp3"
Although,
I would suggest passing in a descriptor into your player instead.
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 ()
{
}
}
Note that the sound file for this example is actually in a root Android Assets folder and not in resources.
Upvotes: 2