我目前正在開發一個Android應用程序,以不同的時間間隔向用戶播放聲音。我有工作代碼(下面包含),其功能與我的Hero(運行2.2)和1.6仿真器上的預期功能完全相同。然而,它不適用於我的朋友Xperia x8 - 沒有聲音播放。他有一個通知音設定,當他收到一個文本等時可以正常播放。Android MediaPlayer不在某些平臺上播放聲音
private void prepareAudio(){
alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
mp = new MediaPlayer();
if(alert != null){
try {
mp.setDataSource(ctx, alert);
} catch (IllegalArgumentException e) {
Log.i("Prepare Audio", e.getMessage());
} catch (SecurityException e) {
Log.i("Prepare Audio", e.getMessage());
} catch (IllegalStateException e) {
Log.i("Prepare Audio", e.getMessage());
} catch (IOException e) {
Log.i("Prepare Audio", e.getMessage());
}
}
am = (AudioManager)ctx.getSystemService(Context.AUDIO_SERVICE);
}
private void notifyUser(){
if(alert != null){
if (am.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setLooping(false);
try {
mp.prepare();
} catch (IllegalStateException e) {
Log.i("Notify User", e.getMessage());
} catch (IOException e) {
Log.i("Notify User", e.getMessage());
}
mp.start();
} else {
Log.i("Notify User", "Alarm volume zero");
}
} else {
Log.i("Notify User", "Uri is null");
}
long[] pattern = {0,200,300,600};
v.vibrate(pattern, -1);
}
PrepareAudio被稱爲上初始化類,以及向notifyUser每次我們想要播放的聲音。它應該時,手機總是振動,所以notifyUser肯定被稱爲。
我朋友安裝的版本使用e.printStackTrace而不是Log.i,所以logcat中沒有任何東西被吐出來。我會試着去拿他的手機把它更新到Log.i的版本,但同時代碼有什麼明顯的錯誤可能導致這樣一個間歇性的問題?
感謝,
我已經測試過一個MP3(在模擬器中,有1.6),然後無論我的英雄有(2.2),這兩個工作。我不知道x8使用的是什麼格式,或者哪個版本的Android(儘管快速谷歌建議2.1)。謝謝! – Dan 2011-01-27 19:03:18