Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何注销与重复报警关联的BroadcastReceiver?_Android_Android Alarms_Android Broadcast - Fatal编程技术网

Android 如何注销与重复报警关联的BroadcastReceiver?

Android 如何注销与重复报警关联的BroadcastReceiver?,android,android-alarms,android-broadcast,Android,Android Alarms,Android Broadcast,我不清楚如何做到这一点,我在Android文档中迷失了方向。不过,我认为这是一个很常见的场景,那么有人能告诉我找到广播接收器的合适方法,这样我就可以注销它(或者给我指出正确的方向,这样我就可以自学) 设置报警: registerReceiver(alarmHandler, new IntentFilter("com.blah.alarm")); PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent("com.blah.

我不清楚如何做到这一点,我在Android文档中迷失了方向。不过,我认为这是一个很常见的场景,那么有人能告诉我找到广播接收器的合适方法,这样我就可以注销它(或者给我指出正确的方向,这样我就可以自学)

设置报警:

registerReceiver(alarmHandler, new IntentFilter("com.blah.alarm"));
PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent("com.blah.alarm"), 0);
AlarmManager am = (AlarmManager) (this.getSystemService( Context.ALARM_SERVICE ));
am.setRepeating(
        AlarmManager.RTC_WAKEUP, someCalendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
解除警报:

PendingIntent pi = PendingIntent.getBroadcast(
            this, 0, new Intent("com.blah.alarm", PendingIntent.FLAG_NO_CREATE);
if (pi != null) {
    AlarmManager am = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
    am.cancel(pi);
}
unregisterReceiver(????????); // how do I get alarmHandler ref ??

您需要将
alarmHandler
引用保存在某个变量中,以便在需要调用unregister()时获得它。Android没有提供任何你可以调用的方法来获取对它的引用。

这对我来说是不可能的,因为我想选择完全销毁应用程序,然后可能几天甚至几周?稍后,启动应用程序并取消长时间运行的警报。事实证明,使用服务而不是广播接收器似乎更适合这种任务,所以这就是我所做的,不再存在任何问题。对吗?所以,BR如果它可以保留一个ref,否则服务更合适吗?我想你遗漏了一些东西。你当然可以在应用程序被销毁后取消警报(警报存储在Android AlarmManager中)。但是,在应用程序被销毁后,您无法注销BroadcastReceiver。注册BroadcastReceiver时,您正在注册内存中的对象。一旦该对象消失(垃圾收集、应用程序关闭、应用程序进程终止或手机重新启动),它就消失了(即:自动注销)。另外,如果手机重新启动,所有预定的闹钟都会被删除。我明白了。好吧,我想这回答了我最初的问题,干杯。