【问题标题】:Setting data source to an raw ID in MediaPlayer在 MediaPlayer 中将数据源设置为原始 ID
【发布时间】:2010-11-19 23:44:13
【问题描述】:

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

【问题讨论】:

    标签: android android-mediaplayer


    【解决方案1】:

    参考来源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 添加到块中。

    【讨论】:

    • 非常感谢!我将其合并到以下答案中,其中包含从资源播放警报声音的完整功能:stackoverflow.com/a/53390067/826946
    • 你为什么马上打电话给afd.close()?那不是使描述符无效,因此无法使用吗???
    【解决方案2】:

    在这里解释@Kartik 的答案Get URI of .mp3 file stored in res/raw folder in android

    如果你想获取任何资源 URI,那么有两种方法:

    1. 使用资源名称

    语法:android.resource://[package]/[res type]/[res name]

    示例: uri.parse("android.resource://com.my.package/drawable/icon");

    1. 使用资源 ID

    语法: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));
    

    【讨论】:

      【解决方案3】:

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

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

      然后按照 pocketjourney 之类的流式教程进行操作

      但这太复杂了,你可以直接调用

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

      【讨论】:

      • 文档相关部分:“请注意,由于该方法会自动调用prepare(),因此您无法更改新MediaPlayer的音频流类型、音频会话ID或音频属性。”跨度>
      • 答案中的 pocketjourney 链接已失效。
      • 这个答案没有回答 OP 的实际问题:你不能在 setDataSource 中设置输入流...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多