web-dev-qa-db-ja.com

MediaPlayerでデータソースを未加工IDに設定する

MediaPlayer.createメソッドではRawファイルのIDを使用できますが、それをsetDataSourceメソッドで使用するにはどうすればよいですか?

30
russoue

通常のストリームの場合と同様に、生のオーディオを入力ストリームにロードしてMediaPlayerにロードできます。

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

pocketjourney のようなストリーミングチュートリアルに従います

しかし、これは単に呼び出すことができるため、過度に複雑です

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

ソースを参照してください 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を追加することもできます。

48
Chris.Zou

@Kartikの答えをここで言い換えると Androidのres/rawフォルダーに保存されている.mp3ファイルのURIを取得

リソースURIを取得する場合、2つの方法があります:

  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の2番目の方法が推奨されます。

データソースを次のように設定します:

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