Android:有没有办法停止在BootReceiver中触发AlarmReceiver

问题描述:

我正在使用Boot接收器来触发AlarmManager,以便它每分钟重复执行一次任务。我希望用户在应用程序选项中启用/禁用在每次重复AlarmManager中完成的操作。到目前为止,我只使用了一个蹩脚的解决方案。我在SharedPreferences中设置了用户的偏好,并且在AlarmManager的每次重复中,我都会检查SharedPreferences中的用户偏好,并根据此偏好来执行或忽略该功能。Android:有没有办法停止在BootReceiver中触发AlarmReceiver

到目前为止,据我所知,没有办法从内部完全摧毁AlarmManager。但我可能是错的。

此外,由于启动接收器在AndroidManifest.xml中注册,并且仅在调用onReceive时才存在BroadcastReceiver,因此可能无法获取对AlarmManager对象的引用,以便我可以从外部取消警报AlarmManager.cancel。但我可能对这一切都是错误的。所以我想问一下,如果我误解了所有这些,或者有什么方法可以彻底销毁/取消在Boot上启动的AlarmManager(从AlaramManager内部或外部无关紧要)。有任何想法吗?在此先感谢

您可以通过使用相同的待定意向随时取消警报。

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