OK、ありがとうございましたが、.NETWebサービスから取得するのでbyte[]からmp3を再生する必要がありました(動的に生成されたmp3をサーバーに保存したくない)。
結局のところ、単純なmp3を再生するための「落とし穴」がいくつかあります...これは、それを必要とする人のためのコードです。
private MediaPlayer mediaPlayer = new MediaPlayer();
private void playMp3(byte[] mp3SoundByteArray) {
try {
// create temp file that will hold byte array
File tempMp3 = File.createTempFile("kurchina", "mp3", getCacheDir());
tempMp3.deleteOnExit();
FileOutputStream fos = new FileOutputStream(tempMp3);
fos.write(mp3SoundByteArray);
fos.close();
// resetting mediaplayer instance to evade problems
mediaPlayer.reset();
// In case you run into issues with threading consider new instance like:
// MediaPlayer mediaPlayer = new MediaPlayer();
// Tried passing path directly, but kept getting
// "Prepare failed.: status=0x1"
// so using file descriptor instead
FileInputStream fis = new FileInputStream(tempMp3);
mediaPlayer.setDataSource(fis.getFD());
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException ex) {
String s = ex.toString();
ex.printStackTrace();
}
}
編集:私は4年以上前にこの答えを書きました-明らかにそれ以来多くのことが変わりました。MediaPlayerインスタンスを再利用する方法に関するJustinのコメントを参照してください。また、.deleteOnExit()が機能するかどうかもわかりません。一時ファイルが積み重ならないように、自由に改善を提案してください。