2012-03-28 79 views
1

我正在編寫Android鬧鐘應用程序。當警報被觸發時,我可以將活動正確完成(它會喚醒手機,關閉鍵盤並顯示警報視圖),但是如果發生警報,​​我不能在一生中聽到警報聲當警報關閉時,設備處於睡眠模式。 (當設備處於喚醒狀態並且鍵盤保持打開狀態時,它聽起來很完美。)我正在使用喚醒鎖。我嘗試過使用MediaPlayer和SoundPool沒有成功。有沒有我失蹤的某種權限? (我已經有WAKE_LOCK,DISABLE_KEYGUARD和RECEIVE_BOOT_COMPLETED權限。)從睡眠模式喚醒時音頻不會播放(android)

當使用SoundPool進行調試時,我執行負載,返回一個有效的聲音ID integer(1),但是onLoadComplete監聽器(這是播放聲音的地方)永遠不會被解僱。當設備醒來時它會很好地啓動。

有沒有人有任何想法或遇到同樣的問題?

+1

找到解決方案!我有電話在類的onCreate()方法中播放音頻。我將它移到了onResume()上,因爲這是在您知道設備完全清醒並且活動可見時在頂部和焦點上。 – user1299177 2012-03-28 21:30:18

回答

3

找到解決方案!我有電話在類的onCreate()方法中播放音頻。我將它移到了onResume()上,因爲這是在您知道設備完全清醒並且活動可見時在頂部和焦點上。

+0

爲我節省了很多麻煩......謝謝。 – DrkStr 2013-09-26 19:40:24

+0

你也可以使用onStart(),因爲它總是在onCreate()之後調用,而onResume()並不總是這樣。乾杯! – 2015-04-13 13:23:25

0

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

好哇,它的作品!