gpt4 book ai didi

android - 如何取消 PendingIntent

转载 作者:行者123 更新时间:2023-11-29 00:35:16 27 4
gpt4 key购买 nike

我有一个导航应用程序。我想获得可能暂时不会到达的位置信息,具体取决于 GPS 锁定所需的时间——或者接收信号不好时的时间。

我计划使用 LocationManager.requestLocationUpdates() 请求位置信息在可用时发送到 BroadcastReciever,并通过 设置超时code>AlarmManager.set().

如果位置更新到了,我想取消超时。如果超时到了,我想取消位置更新。假设我的应用程序可能会在这两种情况发生之前被终止,我将丢失我想要取消的事情的 PendingIntent

有没有办法以某种方式保存 PendingIntent,这样我以后就可以用它们来取消超时和/或位置更新?还是有更好的方法来解决这个问题?

最佳答案

您不需要保存 PendingIntent 实例本身。 AlarmManager.cancel(PendingIntent operation) 的文档说,

Remove any alarms with a matching Intent. Any alarm, of any type, whose Intent matches this one (as defined by filterEquals(Intent)), will be canceled.

如果你看 Intent.filterEquals(Intent),它说,

Determine if two intents are the same for the purposes of intent resolution (filtering). That is, if their action, data, type, class, and categories are the same. This does not compare any extra data included in the intents.

因此,您只需创建一个具有相同操作的 PendingIntent 并使用新的待定 Intent 执行 am.cancel(),它也会取消之前的待定 Intent 。

这是一个快速代码示例:

private static final String ALARM_ACTION = "foo.bar.MY_ALARM_ACTION";

private PendingIntent getAlarmIntent() {
Intent alarmIntent = new Intent(ALARM_ACTION);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); // or whatever flag you need
return pi;
}

现在您可以使用从上述函数返回的 PendingIntent 调用 am.set(),也可以使用从同一函数返回的 PendingIntent 调用 am.cancel()。 PendingIntent 是否是同一个实例并不重要,它只需要匹配 Intent.filterEquals() 测试(所以基本上只有 Intent 操作必须匹配)。

所以基本上只需使用相同的操作来创 build 置/取消警报的 Intent ,它就会起作用。

关于android - 如何取消 PendingIntent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13024307/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com