代码之家  ›  专栏  ›  技术社区  ›  russoue

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

  •  25
  • russoue  · 技术社区  · 15 年前

    在mediaplayer.create方法中,可以使用原始文件的ID,但如何在setdatasource方法中使用它?

    3 回复  |  直到 11 年前
        1
  •  13
  •   stealthcopter    15 年前

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

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

    然后遵循流教程 pocketjourney

    但这太复杂了

    mp = MediaPlayer.create(counterstrikesb.this, R.raw.example);
    
        2
  •  43
  •   Chris.Zou    11 年前

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

        3
  •  15
  •   Community CDub    8 年前

    转述@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);

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

    IMO首选第二种方式,如重命名资源等 很容易重构。

    按如下方式设置数据源:

    CONSTANTS.RES_PREFIX = "android.resource://com.my.package/"
    
    mp.setDataSource(getApplicationContext(),
                  Uri.parse(CONSTANTS.RES_PREFIX + R.raw.id));