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

当您有多个一次性警报时,使用AlarmManager.Cancel()

晋功
2023-03-14

移除任何具有匹配意图的警报。任何类型的警报,其意图与此匹配(由filterEquals(Intent)定义),都将被取消。

由于此应用程序设计为具有多个一次性警报,我想知道我的假设是,由于这些警报都来自由相同方法创建的相同基本意图,取消一个警报是否会取消所有警报。如果是的话,我该如何处理这件事呢?

共有1个答案

诸葛嘉熙
2023-03-14

您可以通过创建一个唯一的id(例如:

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pi);

现在,当您要取消这个警报时,您必须使用相同的唯一ID创建相同的PendingIntent。例如,下面的操作将只取消您使用PendingIntent id 1234创建的警报。

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

am.cancel(pi);

想法很简单。跟踪ID,然后使用它们取消各自的警报。如果您使用相同的id创建多个警报,则最新的警报将取消前一个警报。

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

  • 我需要设置许多每周重复的警报,当用户在上课时(这是一个学术应用程序)自动将手机调到振动状态,然后在下课时重置音量。 用户可以取消课程和注册课程(但不能直接在应用程序中),这将更新并反映在数据库中,只保留当前的课程。因此,如果我有一个警报设置到一个不再存在的类,我如何取消它,如果我不能复制PendingIntent? 我在这里看到的一个解决方案是创建一个数据库表来跟踪当前的警报,然后我就可以完全控制

  • 问题内容: 我已在帖子中搜索了我的问题的答案,但没有找到能解决我问题的任何东西。我正在尝试使用一个AlarmSettings类设置3种不同的警报。当我设置两个警报时,第二个警报优先于第一个警报,第一个永不熄灭。我认为这可能与我的未决意图有关……我真的是android新手,非常感谢您的帮助。这是我设置警报的代码: 问题答案: 将0属性更改为警报的ID,例如,您有三个警报, 用0,1,2重复上述代码。

  • 问题内容: 我有这个,在设定的总数时我得到一个错误。为什么我不能多次访问CTE? 问题答案: A基本上是一次性视图。它只保留一个语句,然后自动消失。 您的选择包括: 重新定义第二次。从定义的末尾到您的之前,这就像复制粘贴一样简单。 将结果放入表格或变量中 将结果具体化为真实表并引用 稍微更改一下即可,只需从您的CTE: 。

  • 我想创建一个闹钟,它会在预定义的时间每天响。我是否需要为每小时创建一个PendingIntent并将其添加到AlarmManager中,或者是否有更简单的方法来实现这一点?