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

时间:2009-08-16 05:17:57

标签: android android-mediaplayer

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

3 个答案:

答案 0 :(得分:46)

请参阅来源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。

答案 1 :(得分:16)

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

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

  1. 使用资源名称
  2.   

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

         

    示例:   Uri.parse( “android.resource://com.my.package/drawable/icon”);

    1. 使用资源ID
    2.   

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

答案 2 :(得分:13)

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

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

然后按照pocketjourney

之类的流媒体教程进行操作

但是这太复杂了,因为你可以打电话给

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