当前位置: 首页 > 知识库问答 >
问题:

使用alarmManager取消所有警报设置

盛柏
2023-03-14

我想取消所有设置的警报。。。。。我已经搜索了很多,尝试了很多东西,但都没有成功。。。当我将闹钟设置为2分钟后,然后取消它时,2分钟后它仍会启动。。。。。任何帮助都将不胜感激。

创建警报的方法

Intent intent = new Intent(c, AlarmReceiver.class);
    intent.putExtra("task", task);
    intent.putExtra("id", id);
    PendingIntent pendingIntent = PendingIntent.getActivity(c, code, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager am = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

这是为了取消报警:

    Intent intent = new Intent(c, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(c, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager am = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
    am.cancel(pendingIntent);

共有3个答案

东郭远航
2023-03-14

要取消报警,无需重新创建相同的挂起内容并传递相同的请求代码。

你可以在这里看到我的解决方案

程俊力
2023-03-14

您设置的报警请求代码(getActivity的第二个参数)等于,而取消报警时,第二个参数为0。如果code的值不是0,则不会取消报警。

要触发和取消多个报警,您需要在PendingContent中为requestCode(第二个参数)使用唯一值。getActivity(获取活动)

请参阅此代码,该代码将使用三个唯一的请求代码设置3个警报,

for (int requestCode = 1; requestCode <= 3; requestCode++) {
            PendingIntent pendingIntent = PendingIntent.getActivity(c, requestCode, intent,PendingIntent.FLAG_CANCEL_CURRENT);
           AlarmManager am = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
           am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
        }

您可以使用用于设置警报的相同Request estCode(和其他参数)取消警报。

需要匹配的其他参数是,

  • 意图中的“操作”必须相同(或都为空)。否则,它们不匹配

有关更多详细信息,请参阅此答案。

邹玮
2023-03-14

当您安排警报时,getactive()的第二个参数是code

当您尝试取消警报时,getactive()的第二个参数是0。这只会成功取消code0的警报。

如果要一致地取消报警,需要创建等效的挂起内容,这意味着除其他外,getActivity()的第二个参数必须相同。

 类似资料:
  • 在我的代码中,我创建了一个警报,如下所示: 要取消警报,我执行以下操作: 移除任何具有匹配意图的警报。任何类型的警报,其意图与此警报匹配(由filterEquals(Intent)定义),都将被取消。 我不太确定“匹配意图”的定义是什么。如果我用上面的代码创建多个警报,然后按照显示的方式执行取消,它会取消我创建的所有警报吗?

  • 我试过很多次了,但什么也没有。 这是类的代码,它应该设置警报,但在指定的时间和日期没有发生任何事情。

  • 我每天上午11点使用显示通知。 当我在应用程序中设置警报时,警报会在短时间后触发。

  • 我现在一筹莫展。 请求代码收集在一个ArrayList中,这样当程序退出时,另一个函数可以清除所有警报。 现在的问题是:我的警报器打不响。我能够找到这个函数的错误。AlarmManager实例很好。我在底部设置了一个测试警报(在带有星号的行之后)。着火了。为什么???

  • 我有一个应用程序,在指定的时间设置警报与TimePicker(24小时模式)。 我注意到,如果时间是23:00,而您将报警设置为01:00,AlarmManager会将其解释为已过日期。目前,我设置的警报如下所示: 正如你所看到的,该应用程序计算时差,如果时差为负值,则设置第二天的警报。这就产生了上面描述的bug。如何修复它? 当做 马库斯

  • 我遇到了麻烦,而试图设置一个准确的警报,只有时间选择器。我设置了一个带有如下处理程序的时间选择器: 计时器 不幸的是,当这样做时,警报会立即播放。我也试过用am.setalarmclock但是我不知道如何用它来使用RTC时间,你能帮我吗? 我已经读了很多线程,就像我正在尝试设置警报在特定的时间使用警报管理器,但警报立即启动?并从DatePicker和TimePicker中设置AlarmManage