我最近遇到了同样的问题。我解决这个问题的方式是阅读你的答案,还可以通过记录发生的事情来检查活动流程。基本上onCreate
,onStart
,onResume
,,onStop
,onStart
,onResume
被按此顺序发射。这是一个以报警屏幕开始的活动。
我将初始化代码保留在onStart
方法中,确保使用.prepare()
而不是prepareAsync()
,因为我使用本地声音。
try {
Log.d(LOG_TAG, "Setting media player URI: " + alarmTone.toString());
//mMediaPlayer = MediaPlayer.create(this,);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(getApplicationContext(), alarmTone);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mMediaPlayer.setLooping(true);
mMediaPlayer.setVolume(100, 100);
mMediaPlayer.prepare();
} catch (Exception ex) {
Log.d(LOG_TAG, "Exception from media player: " + ex.getMessage());
}
然后和onStop
方法里面,我说:
if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
}
里面的onResume
方法我加入了媒体播放代码:
if (mMediaPlayer != null && !mMediaPlayer.isPlaying()) {
Log.d(LOG_TAG, "Playing alarm through Media Player");
mMediaPlayer.start();
}
好哇,它的作品!
找到解决方案!我有电话在类的onCreate()方法中播放音频。我将它移到了onResume()上,因为这是在您知道设备完全清醒并且活动可见时在顶部和焦点上。 – user1299177 2012-03-28 21:30:18