我最近遇到了同樣的問題。我解決這個問題的方式是閱讀你的答案,還可以通過記錄發生的事情來檢查活動流程。基本上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