Android MediaPlayer:基于URI播放Raw中的音频资源

我试图解决的问题是在一个需要播放音频文件的活动中.大多数文件将由用户创建(并保存到外部存储器中),因此使用以下代码播放(基于Google的示例代码):

MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setDataSource(filename);
mPlayer.prepare();
mPlayer.start();

但是,一些音频文件将包含在应用程序中,通常使用以下代码播放:

MediaPlayer mPlayer = MediaPlayer.create(getBaseContext(),R.raw.filename);
mPlayer.prepare();
mPlayer.start();

问题是我希望能够像播放用户创建的文件一样播放raw文件夹中的音频文件,因为我不一定知道需要哪些文件.我试过在raw文件夹中获取音频文件的URI并使用以下代码播放它:

Uri uri = Uri.parse("android/resource://com.my.package/" + R.raw.filename);
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setDataSource(uri.toString());
mPlayer.prepare();
mPlayer.start();

但没有任何反应.没有错误消息,没有播放音频.

我概述了我认为最简单的解决方案,但如果它完成任务,我愿意走另一条路.非常感谢任何帮助.

最佳答案
我设法让它工作,这是我使用的代码.

mMediaPlayer = new MediaPlayer();
Uri mediaPath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.filename);
try {
    mMediaPlayer.setDataSource(getApplicationContext(),mediaPath);
    mMediaPlayer.prepare();
    mMediaPlayer.start();
} catch (Exception e) {
    e.printstacktrace();
}

我看到你的代码看到了两个问题.首先是“android / resource”需要成为“android.resource”

第二个是setDataSource(String)在这种情况下不起作用,因为你需要上下文来使用原始文件,否则它会尝试错误地打开文件. (参见MediaPlayer.setDataSource(String) not working with local files的最佳答案)

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...