2011-11-25 53 views
2

我正在使用Boot接收器來觸發AlarmManager,以便它每分鐘重複執行一次任務。我希望用戶在應用程序選項中啓用/禁用在每次重複AlarmManager中完成的操作。到目前爲止,我只使用了一個蹩腳的解決方案。我在SharedPreferences中設置了用戶的偏好,並且在AlarmManager的每次重複中,我都會檢查SharedPreferences中的用戶偏好,並根據此偏好來執行或忽略該功能。Android:有沒有辦法停止在BootReceiver中觸發AlarmReceiver

到目前爲止,據我所知,沒有辦法從內部完全摧毀AlarmManager。但我可能是錯的。

此外,由於啓動接收器在AndroidManifest.xml中註冊,並且僅在調用onReceive時才存在BroadcastReceiver,因此可能無法獲取對AlarmManager對象的引用,以便我可以從外部取消警報AlarmManager.cancel。但我可能對這一切都是錯誤的。所以我想問一下,如果我誤解了所有這些,或者有什麼方法可以徹底銷燬/取消在Boot上啓動的AlarmManager(從AlaramManager內部或外部無關緊要)。有任何想法嗎?在此先感謝

回答

5

您可以通過使用相同的待定意向隨時取消警報。

Intent intent = new Intent(show.this, TimeAlarm.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(show.this, 0, 
       intent, PendingIntent.FLAG_CANCEL_CURRENT); 

     <Alarm_Manager_Object>.cancel(pendingIntent); 
+0

謝謝你的快速回答。是的,我知道方法AlarmManager.cancel,但問題是,我沒有對Alarm_Manager_Object的引用。對這個對象的引用僅在BootReceiver類的onReceive方法中存在(它擴展了BroadcastReceiver並在系統引導時觸發),並且此方法保留引用大概10秒左右,然後引用丟失,無法訪問 - 或者我相信,但我可能是錯的。 – Lukas1

+1

在這種情況下只需獲取一個新消息,然後在該消息中調用AlarmManager#cancel(PendingIntent)。重要的部分是PendingIntent。 – Jens

+0

哦,對不起,你完全正確,我只是意識到我是多麼愚蠢。非常感謝你們。 – Lukas1

相關問題