我目前正在开发一个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