gpt4 book ai didi

android - 如何获得已经挂起的 PendingIntent 的 Intent extra?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:27:16 24 4
gpt4 key购买 nike

我已经用 AlarmManager 安排了一个 PendingIntent。当 AlarmManager 传送 Intent 时,我能够 getExtras() 我最初发送的所有数据。

但是,有时在 AlarmManager 触发之前,我会获得要通过 Intent 传递的额外数据。我的想法是,我会得到 Intent 就像我要取消它一样,但是在取消它之后,更新附加内容并使用 AlarmManager 重新安排它,就像这样:

Intent i=new Intent(this, MyReceiver.class);
Bundle b = i.getExtras();
PendingIntent pi=PendingIntent.getBroadcast(this, id,i, 0);
if (b == null) b = i.getExtras(); // in case I can't get it before calling getBroadcast
// now add a key to b, put it in a new intent, schedule it, and cancel the old one?

我调用 getBroadcast() 时使用的 ID 与之前安排的 ID 相同。唯一的问题是,当我调用 getExtras() 时,它总是返回 null。这似乎与我经常看到的问题相反,其中 Intent 将被缓存,但这是不需要的。在这种情况下,我实际上想要获取缓存的 Intent 并获取它的值,并且由于 Intent 处于待处理状态,它应该仍然存在。

我该怎么做?

我有过和/或尝试过的一些想法。一个围绕 Intent.fillIn() 函数,我是否可以使用它来指示它应该(或不应该)覆盖额外内容,以便我可以检索原始内容。

进一步观察,我看到 PendingIntentwriteToParcel()。我可以使用它来访问附加的 Intent 的额外内容吗?我的尝试因 readParcel 上的 readBundle: bad magic number 异常而失败:

PendingIntent pi=PendingIntent.getBroadcast(this, id,i, 0);
Parcel out = Parcel.obtain();
pi.writeToParcel(out, 0);
i.readFromParcel(out);

我怀疑这可能是因为我正在输出 PendingIntent 但试图将其作为 Intent 读回。

另一个想法是,我可以在 PendingIntent 上调用 send() 以使其立即传送,传递一个新的 Intent 和一个要添加的新键。然后在处理程序中,我将不得不遍历 Intent 附加部分中的所有键。然后,如果还没有到进行实际处理的时间,它就需要向 AlarmManager 重新发出 PendingIntent

最佳答案

试试这个

pi = PendingIntent.getBroadcast(this, id, i, 
PendingIntent.FLAG_UPDATE_CURRENT)

这里我们发送 PendingIntent.FLAG_UPDATE_CURRENT Intent 标志,如果存在相同的 PendingIntent,它将按原样返回,否则将返回一个新的 PendingIntent。

请注意,当我们说 Intent 匹配时,URI、数据类型、类别将被匹配,而 Intent 附加信息将在匹配时被忽略。换句话说,IntentFilters 将匹配两个 Intent 。

关于android - 如何获得已经挂起的 PendingIntent 的 Intent extra?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004006/

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