好的,谢谢大家,但是我需要从byte []播放mp3,因为我是从.NET webservice获得的(不希望在服务器上存储动态生成的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年前写了这个答案-显然,从那时起,很多事情都发生了变化。请参阅Justin关于如何重用MediaPlayer实例的评论。另外,我不知道.deleteOnExit()现在是否适合您-随时提出改进建议,以免临时文件堆积。