I have an audio file in my assets directory. assets/audio/dance.mp3.
If I run context.getAssets().list("audio"); it shows up.
But when I try to use MediaPlayer.create(context,uri) it always fails and returns null.
none of this seems to work
private void tryLoad(String path,Context context)
{
Uri uri = Uri.parse(path);
this.audioPlayer = MediaPlayer.create(context,uri);
if (this.audioPlayer == null)
{
Log.d(TAG, "loadAudio: audioPlayer is null. current assets"+ uri.toString()) ;
}
else
{
Log.d(TAG, "loadAudio: WORKED"+ uri.toString()) ;
}
}
public void loadAudio(Context context)
{
if (this.audioPlayer != null)
return;
if (this.audioFile != null && this.audioFile.length() >0)
{
try
{
tryLoad("/dance.mp3",context);
tryLoad("dance.mp3",context);
tryLoad("audio/dance.mp3",context);
tryLoad("/audio/dance.mp3",context);
tryLoad("assets/audio/dance.mp3",context);
tryLoad("/assets/audio/dance.mp3",context);
tryLoad("\\dance.mp3",context);
tryLoad("dance.mp3",context);
tryLoad("audio\\dance.mp3",context);
tryLoad("\\audio\\dance.mp3",context);
tryLoad("assets\\audio\\dance.mp3",context);
tryLoad("\\assets\\audio\\dance.mp3",context);
}
catch (Exception e)
{
Log.d(TAG, "loadAudio exception: " + e.getMessage());
}
}
}
I have asked something like this question, look at this post MediaPlayer issue between raw folder and sdcard on android. I hope this help you
I think you can do it because the
MediaPlayer
expects an URI and it's impossible to create an URI for an assets file. Try creating aMediaPlayer
object and setting a data source to it using theMediaPlayer.setDataSource(FileDescriptor)
method. You can get theFileDescriptor
object using theAssetManager.openFd()
method and then calling theAssetFileDescriptor.getFileDescriptor()
method for the returned object.I haven't tried this solution, so it's just an idea. But I hope it'll work.
you cannot call mp.setDataSource(afd.getFileDescriptor()); on an asset file as it will play all the assets. Instead follow the solution in this thread: Play audio file from the assets directory
You need to put the file in the
res/raw
folder and then loading it with:MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
From: Android documentation