撤销 PendingIntent

19

AppWidgetProvider中使用PendingIntent时,我正在使用以下代码:

views.setOnClickPendingIntent( viewId,
                PendingIntent.getBroadcast( context, 0, intent,
                PendingIntent.FLAG_UPDATE_CURRENT ) );

目前没有保留对由getBroadcast方法返回的PendingIntent的引用。在特定情况下,我现在想取消PendingIntent。是否有办法从View中获取PendingIntent?或者唯一的方法是保留对其引用,并随后调用PendingIntent的cancel方法?


请见 https://dev59.com/eG855IYBdhLWcg3wbztl#4350149 - Dheeraj Vepakomma
谢谢,Dheeraj!我现在有点赶,但我会尽快查看并尝试它。干杯! - Roger Rapid
1个回答

33

如果你想要取消它,在你代码库的其他地方,你需要执行以下操作:

PendingIntent.getBroadcast(context, 0, intent, 
                           PendingIntent.FLAG_UPDATE_CURRENT).cancel();

其中intent与您在代码中引用的相同。使用PendingIntent.FLAG_UPDATE_CURRENTPendingIntent.getBroadcast(...)将返回对已创建的现有引用,或者如果当前不存在,则创建一个新引用。


3
如果我使用该标志,getBroadcast是否会返回相同的对象引用 - lysergic-acid
你好,意图中添加的额外信息是否很重要?它们必须完全相同(意图目标、操作和额外信息)吗? - Neon Warge
2
一个常见的错误是创建多个 PendingIntent 对象,这些对象使用的 Intent 只有 "extra" 内容不同,期望每次都会得到不同的 PendingIntent。但实际上并非如此。用于匹配的 Intent 部分是由 Intent#filterEquals(Intent) 定义的相同部分。 - juanlugm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接