在 MediaPlayer.create 方法中,可以使用原始文件的 id,但如何在 setDataSource 方法中使用它?

有帮助吗?

解决方案

您可以将原始音频加载到输入流中,然后将其加载到 MediaPlayer 中,就像加载普通流一样:

InputStream ins = getResources().openRawResource(R.raw.example);

然后按照流媒体教程进行操作,例如 口袋之旅

但这太复杂了,因为你只需调用

mp = MediaPlayer.create(counterstrikesb.this, R.raw.example);

其他提示

参考源码 android.media.MediaPlayer

AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
if (afd == null) return;
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();

您可能想将 try-catch 添加到块中。

意译@卡尔蒂克的答案在这里 获得URI。mp3文件存储在res/原文件夹在安卓

如果你想得到任何资源URI然后有两种方式:

  1. 使用资源的名字

语法:序。资源://[包]/[res类型]/[res名]

例如:Uri。parse("序。资源://com.我的。包装冲/标");

  1. 使用的资源Id

语法:序。资源://[包]/[resource_id]

例如:Uri。parse("序。资源://com.我的。包装/"+ R.可画.图标);

这些例子得到的URI的任何图像文件储存在绘制文件夹。同样,你可以得到的Uri res/原文件夹。

海事组织第二种方法是首选,因为重新命名的资源可以等 够容易地重构。

集的数据来源如下所示:

CONSTANTS.RES_PREFIX = "android.resource://com.my.package/"
mp.setDataSource(getApplicationContext(),
              Uri.parse(CONSTANTS.RES_PREFIX + R.raw.id));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top