2010-04-10 37 views
2

在我的android應用程序中,我設置了一個要重複發生的警報,因此使用AlarmManager.setRepeating()。是AlarmManager.setRepeating idempotent?

我不想跟蹤自己是否設置了鬧鐘(聽起來像是一個糟糕的主意,很容易在某些時候失敗),並且似乎沒有API支持來檢查某個特定鬧鐘是否已經存在爲給定的意圖設置。

因此,我悲觀地重置我的每一個應用程序啓動時間報警:

alarmManager.cancel(pendingIntent); 
... 
alarmManager.setRepeating(..., pendingIntent); 

問題:呼籲setRepeating()冪等即我需要明確取消()任何事先警告或我可以放心地只是調用setRepeating()並完成它?

回答

3

API documentation狀態:

如果已經有計劃 爲同一IntentSender報警時,它會首先 被取消。

我知道這不是完全清楚,但他們所說的是AlarmManager將檢查你傳遞給setRepeating()PendingIntent,如果已經有計劃有相同PendingIntent然後警報器,報警將新前被取消一個是預定的。所以,你不需要取消任何之前的報警,只要你的PendingIntent使用是不會改變(oldPendingIntent.equals(newPendingIntent) == true)

PendingIntent API documentation:這個

equals(Object otherObj) 
Comparison operator on two PendingIntent objects, such that true is returned then they both represent the same operation from the same package. 
+0

的問題 - 我工作的一個應用程序,它允許用戶設置多個警報,但它們都觸發相同的PendingIntent。所以看起來每個新人都會取消前一個。如果我在PendingIntent中使用唯一的requestCode,那麼這會阻止重寫,還是仍然將它們計數爲PendingIntent? – 2011-09-26 19:54:25

相關問題