Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在MediaPlayer中将数据源设置为原始ID_Android_Android Mediaplayer - Fatal编程技术网

Android 在MediaPlayer中将数据源设置为原始ID

Android 在MediaPlayer中将数据源设置为原始ID,android,android-mediaplayer,Android,Android Mediaplayer,在MediaPlayer.create方法中,可以使用原始文件的id,但在setDataSource方法中如何使用该id?您可以将原始音频加载到输入流中,并将其加载到MediaPlayer中,就像加载到普通流中一样: InputStream ins = getResources().openRawResource(R.raw.example); 然后遵循流媒体教程,如 但这太复杂了,你可以直接打电话 mp = MediaPlayer.create(counterstrikesb.this, R

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

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

InputStream ins = getResources().openRawResource(R.raw.example);
然后遵循流媒体教程,如

但这太复杂了,你可以直接打电话

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

在这里解释@Kartik的答案

如果要获取任何资源URI,有两种方法:

  • 使用资源名称
  • 语法:android.resource://[package]/[res-type]/[res-name]

    例如: parse(“android。resource://com.my.package/drawable/icon");

  • 使用资源Id
  • 语法:android.resource://[package]/[resource\u id]

    示例:Uri.parse(“android。resource://com.my.package/" + R.drawable.icon)

    这些是获取存储在drawable文件夹中的任何图像文件的URI的示例。 同样,您也可以获取res/raw文件夹的URI。

    IMO首选第二种方式,因为可以重命名资源等 易于重构

    按如下方式设置数据源:

    参考资料来源


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

    文档的相关部分:“请注意,由于此方法自动调用
    prepare()
    ,因此您无法更改新MediaPlayer的音频流类型、音频会话ID或音频属性。”答案中PocketTravely的链接已失效。此答案无法回答OP的实际问题:您无法在setDataSource中设置输入流…非常感谢!我将这一点纳入了下面的答案中,其中包含了从资源中播放警报声音的完整功能:为什么要在之后立即调用
    afd.close()
    ?这难道不会使描述符无效,因此无法使用吗???
    CONSTANTS.RES_PREFIX = "android.resource://com.my.package/"
    
    mp.setDataSource(getApplicationContext(),
                  Uri.parse(CONSTANTS.RES_PREFIX + R.raw.id));
    
    AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
    if (afd == null) return;
    mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
    afd.close();