[英]load a MediaPlayer from a Uri in a context assets
我的资产目录中有一个音频文件。 资产/音频/dance.mp3。
如果我运行 context.getAssets().list("audio"); 它出现了。
但是当我尝试使用 MediaPlayer.create(context,uri) 时,它总是失败并返回 null。
这些似乎都不起作用
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());
}
}
}
我认为您可以这样做,因为MediaPlayer
需要一个 URI,并且不可能为资产文件创建一个 URI。 尝试创建一个MediaPlayer
object 并使用MediaPlayer.setDataSource(FileDescriptor)
方法为其设置数据源。 您可以使用AssetManager.openFd()
方法获取FileDescriptor
object,然后为返回的 object 调用AssetFileDescriptor.getFileDescriptor()
方法。
我没有尝试过这个解决方案,所以这只是一个想法。 但我希望它会奏效。
你不能调用 mp.setDataSource(afd.getFileDescriptor()); 在资产文件上,因为它将播放所有资产。 而是遵循此线程中的解决方案: 从资产目录播放音频文件
我问过类似的问题,请查看android 上的原始文件夹和 sdcard 之间的这个帖子 MediaPlayer 问题。 我希望这对你有帮助
您需要将文件放在res/raw
文件夹中,然后使用以下命令加载它:
MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
来自: Android 文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.