【问题标题】:Android: Is there a way to stop AlarmReceiver fired in BootReceiverAndroid:有没有办法阻止在 BootReceiver 中触发的 AlarmReceiver
【发布时间】:2011-11-25 11:46:33
【问题描述】:

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

据我所知,目前还没有办法完全从 AlarmManager 自身内部销毁。但我可能错了。

另外,由于启动接收器是在 AndroidManifest.xml 中注册的,并且 BroadcastReceiver 仅在调用 onReceive 时才真正存在,因此可能无法获取对 AlarmManager 对象的引用,因此我可以使用 AlarmManager 从外部取消警报。取消。但我可能对这一切都错了。

所以我想问一下,如果我对这一切有误,或者是否有某种方法可以完全销毁/取消在启动时启动的 AlarmManager(从 AlaramManager 内部或外部,都没有关系)。有任何想法吗?提前致谢

【问题讨论】:

    标签: android broadcastreceiver alarmmanager


    【解决方案1】:

    您可以使用相同的 Pending Intent 随时取消警报。

    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);
    

    【讨论】:

    • 感谢您的快速回答。是的,我知道AlarmManager.cancel 方法,但是问题是,我没有对Alarm_Manager_Object 的引用。对该对象的引用仅存在于 BootReceiver 类的 onReceive 方法中(它扩展了 BroadcastReceiver 并在系统启动时触发),并且此方法将引用保留大约 10 秒左右,然后引用丢失,无法访问 - 或者我相信,但我可能错了。
    • 在这种情况下,只需获取一个新的并在那个上调用 AlarmManager#cancel(PendingIntent)。重要的部分是 PendingIntent。
    • 哦,对不起,你完全正确,我才意识到我是多么愚蠢。非常感谢你们。
    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多