MediaPlayer でデータ ソースを raw ID に設定する
-
16-09-2019 - |
質問
MediaPlayer.create メソッドでは Raw ファイルへの ID を使用できますが、それを setDataSource メソッドで使用するにはどうすればよいですか?
解決
通常のストリームと同様に、生のオーディオを入力ストリームにロードし、MediaPlayer にロードできます。
InputStream ins = getResources().openRawResource(R.raw.example);
次に、次のようなストリーミングチュートリアルに従います ポケットジャーニー
しかし、これは非常に複雑です。
mp = MediaPlayer.create(counterstrikesb.this, R.raw.example);
他のヒント
出典を参照 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 を追加することもできます。
@Kartikの回答をここで言い換えます Androidのres/rawフォルダーに保存されている.mp3ファイルのURIを取得します
リソース URI を取得したい場合は、2 つの方法があります。
- リソース名の使用
構文:android.resource://[パッケージ]/[解像度タイプ]/[解像度名]
例 :Uri.parse("android.resource://com.my.package/drawable/icon");
- リソースIDの使用
構文:android.resource://[パッケージ]/[リソースID]
例 :uri.parse( "android.resource://com.my.package/" + r.drawable.icon);
これらは、Drawable フォルダーに保存されている画像ファイルの 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));