【发布时间】:2010-11-19 23:44:13
【问题描述】:
在 MediaPlayer.create 方法中可以使用原始文件的 id,但如何在 setDataSource 方法中使用它?
【问题讨论】:
标签: android android-mediaplayer
在 MediaPlayer.create 方法中可以使用原始文件的 id,但如何在 setDataSource 方法中使用它?
【问题讨论】:
标签: android android-mediaplayer
AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
if (afd == null) return;
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
您可能希望将 try-catch 添加到块中。
【讨论】:
afd.close()?那不是使描述符无效,因此无法使用吗???
在这里解释@Kartik 的答案Get URI of .mp3 file stored in res/raw folder in android
如果你想获取任何资源 URI,那么有两种方法:
语法:android.resource://[package]/[res type]/[res name]
示例: uri.parse("android.resource://com.my.package/drawable/icon");
语法:android.resource://[package]/[resource_id]
示例:Uri.parse("android.resource://com.my.package/" + R.drawable.icon);
这些是获取存储在可绘制文件夹中的任何图像文件的 URI 的示例。 同样,您可以获取 res/raw 文件夹的 URI。
IMO 首选第二种方式,因为重命名资源等可以 易于重构。
像这样设置数据源:
CONSTANTS.RES_PREFIX = "android.resource://com.my.package/"
mp.setDataSource(getApplicationContext(), Uri.parse(CONSTANTS.RES_PREFIX + R.raw.id));
【讨论】:
您可以将原始音频加载到输入流中,然后像普通流一样将其加载到 MediaPlayer:
InputStream ins = getResources().openRawResource(R.raw.example);
然后按照 pocketjourney 之类的流式教程进行操作
但这太复杂了,你可以直接调用
mp = MediaPlayer.create(counterstrikesb.this, R.raw.example);
【讨论】:
prepare(),因此您无法更改新MediaPlayer的音频流类型、音频会话ID或音频属性。”跨度>