3 回答

TA貢獻1886條經驗 獲得超2個贊
好的,謝謝大家,但是我需要從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()現在是否適合您-隨時提出改進建議,以免臨時文件堆積。

TA貢獻1995條經驗 獲得超2個贊
通過將MP3文件編碼為Base64(我已經收到來自Restful API服務編碼的數據),然后創建URL對象,我找到了一個簡單的解決方案。我在Android 4.1中進行了測試。
public void PlayAudio(String base64EncodedString){
try
{
String url = "data:audio/mp3;base64,"+base64EncodedString;
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
}
catch(Exception ex){
System.out.print(ex.getMessage());
}
}
- 3 回答
- 0 關注
- 665 瀏覽
添加回答
舉報