2014-05-19 51 views
0

如何設置一個重複報警,當按下按鈕時立即觸發並每4小時重複一次。實時報警管理器立即啓動並每4小時重複一次

alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 
4*60*60*1000, alarmIntent); 

重複自身,但當按下按鈕時不會立即開始。它需要5分鐘才能開火。

我在這裏做錯了什麼?

我改變了代碼如下,報警立即解僱

alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, AlarmManager.INTERVAL_FIFTEEN_MINUTES, 4*60*60*1000, alarmIntent); 

,但它不重複,每4個小時。我怎樣才能讓鬧鐘每4小時重複一次?

回答

0

使用setRepeating而不是setInexactRepeating

使用setInexactRepeating當你想讓你發生報警時左右,但你確實不需要它在那個時候準確地觸發。

此方法的存在使得Android操作系統可以設法同時觸發所有警報,以節省電池壽命。

看看this的問題,它可能會幫助你。

報價接受的答案:

,你應該安排與AlarmManager.setExact報警(),然後當觸發報警下週等等每星期做一遍。

+0

Jeannin-感謝但最新版本,setRepeating被認爲是setInexactRepeating唯一正確的? – Reva

+0

我不知道這一點。也許我們應該檢查android源代碼,看看有什麼確切的行爲。 –

+0

從Google的文檔中,從API 19開始,所有重複警報都是不精確的。我怎樣才能讓鬧鐘第一次立即開火? – Reva

0

這可能是因爲您使用的是setInexactRepeating

從谷歌的documentationsetInexactRepeating

  • 你的報警器的第一個觸發器將不是要求的時間之前,但 它可能不適合在此時間之後幾乎整整間隔發生。此外,在重複報警的整個週期將爲 請求的情況下,報警 的任意兩次連續發射之間的時間可能會有所不同。如果您的應用程序要求非常低的抖動,請改用setRepeating(int,long,long,PendingIntent)代替 。

嘗試:

alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime()+2*1000, 
4*60*60*1000, alarmIntent); 

並檢查它是否在2秒至少觸發.. 不知道是否會解決你的問題,但可能會導致你一個解決辦法。

+0

@ arnab- thanks,從Google的文檔中,從API 19開始,所有重複的警報都是不精確的。我怎樣才能讓鬧鐘第一次觸發 – Reva

+0

alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,AlarmManager.INTERVAL_FIFTEEN_MINUTES,4 * 60 * 60 * 1000,alarmIntent);這會立即發出警報,但4小時後不會重複。請幫忙! – Reva

+0

據我所知,你不能設置Exact-repeating。儘管如此,你可以創建一個確切的警報,並且一旦這個戒指在4小時後設置了另一個警報,並繼續這樣做 – Zen

相關問題