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

取消具有唯一ReqestCode得PendingIntent

孟俊发
2023-03-14

我正在尝试取消一个悬而未决的意图,所以永远只剩下一个。我的requestCode是“1”或“2”,这取决于服务是启动还是停止。启动警报的PendingIntert如下所示(停止几乎相同):

Intent i = new Intent(context, Service.class);
i.setAction("start");
PendingIntent pi = PendingIntent.getService(context, SaveSchedulePrefs.getStartReqCode(context), i, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.cancel(pi)
alarmManager.setExact(AlarmManager.RTC_WAKEUP, mTime, pi);

根据我所读到的内容,pendingIntent必须完全相同才能被取消,而requestCode为1应该满足这一需要。这可能实际上起到了预期的作用,但警报重新触发多天的日志文件显示了两个启动/停止警报(各发生7次)的如下情况:

RTC_WAKEUP #0: Alarm{b216a768 type 0 com.myapp.myRinger}
operation=PendingIntent{b2169318: PendingIntentRecord{b20e5820 com.myapp.myRinger startService}}
  RTC_WAKEUP #0: Alarm{b2172ed0 type 0 com.myapp.myRinger}
operation=PendingIntent{b2172ec0: PendingIntentRecord{b20e6160 com.myapp.myRinger startService}}
  com.myapp.myRinger +856ms running, 14 wakeups:
+759ms 7 wakes 7 alarms: act=stop cmp={com.myapp.myRinger/com.myapp.myRinger.Service}
+758ms 7 wakes 7 alarms: act=start cmp={com.myapp.myRinger/com.myapp.myRinger.Service}

我在日志中看到的是已经激活的警报的历史记录还是没有一个警报被取消?

共有1个答案

都博裕
2023-03-14

看起来原始的pendingintent有action=“start”或action=“stop”。在您发布的代码中,pendingintent不包含操作。在这种情况下它将不匹配(所以它不会取消警报)。

为了使pendingintent匹配,以下内容必须匹配:ACTION、DATA、component。不对意图附加项进行比较,并且为了匹配目的而忽略这些附加项。

 类似资料:
  • 因此,我有一个名为的对象数组,我需要获得每个球员的得分和犯规总数。 我的问题是我认为我使用了太多的 有没有更干净的解决方案? null null

  • 问题内容: 这个问题需要一些假设的背景。让我们考虑一个有列的表,,,,使用MySQL作为RDBMS。由于如果给定的某个人的名字和出生日期与另一个人相同,那么根据定义,他们就是同一个人(除非有两个巧合,即我们两个人分别于1809年2月12日出生,他们叫亚伯拉罕·林肯),所以我们将上的唯一键,这意味着“不要将同一个人存储两次”。现在考虑以下数据: 如果现在尝试运行以下语句,则该语句应该并且将失败: 如

  • 问题内容: 我对数据库表中的唯一行有问题,现在可以这样做: 当我在所有列中使用UNIQUE属性时,即使第二个Moore名称不同,我也会插入第二个Moore错误:/ 如何使用UNIQUE(或INDEX?)在db表中执行类似的操作: 抱歉,如果问题很简单,但是我是sql的初学者,并且在使用UNIQUE之类的UNIQUE时找到一些好的示例时遇到问题:/或者也许我必须在插入新行之前从db中选择一个表并检查

  • 问题内容: 会根据其位置而不是其值来生成其元素被视为唯一的元素。所以基本上我想避免重复这样的事情: 之后的过滤是不可能的,因为在我的情况下,排列的数量太大。 有人知道合适的算法吗? 非常感谢你! 编辑: 我基本上想要的是以下内容: 这是不可能的,因为sorted创建列表并且itertools.product的输出太大。 抱歉,我应该已经描述了实际问题。 问题答案: 结果: 编辑(这是如何工作的):

  • 问题内容: 我想向现有表添加复杂的唯一键。主要从4个字段包含(,,,)。但是表具有非唯一行。我知道我可以删除所有重复的日期,然后再添加复杂的密钥。 也许存在另一种无需搜索所有重复数据的解决方案。(例如添加唯一的忽略等)。 我搜索了UPD,如何删除重复的mysql行-我认为这是一个很好的解决方案。 仅使用MySQL查询删除重复项? 问题答案: 您可以按照yAnTar的建议进行 要么 您可以添加约束

  • 我使用SQS作为视频编码的队列,并希望确保每个视频只执行一次编码。 SQS工作得很好,因为当消息排队时,它只能由单个线程接收。然而,对于相同的视频/编码,可能会向队列发送多条消息,这意味着对于特定的“编码”队列,消息内容将是相同的。 是否需要消除重复以确保对于特定队列,队列中的消息或从队列接收的消息是唯一的? 我想的一个选择是在消息发送时为每种编码类型创建一个新队列。所以队列可以命名为,它只有一条