Mic*_*ael 5 android android-pendingintent
我已经计划了的PendingIntent带AlarmManager.当AlarmManager交付时Intent,我能够获得getExtras()我最初发送的所有数据.
但是,有时我会Intent在AlarmManager火灾发生之前获得我希望传递的其他数据.我的想法是,我会得到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?
Run Code Online (Sandbox Code Playgroud)
我正在getBroadcast()使用与我之前安排的相同ID进行呼叫.唯一的问题是,当我调用getExtras()它时总是返回null.这似乎与我经常看到的问题相反,其中一个Intent将被缓存,这是不希望的.在这种情况下,我实际上想要获得缓存Intent并获取它的值,并且因为它Intent正在等待它应该仍然存在.
我该怎么做呢?
我已经和/或尝试了几个想法.一个围绕这个Intent.fillIn()函数,我可以使用它来表明它应该(或不应该)覆盖额外的东西,以便我可以检索原始的.
看远一点,我看到PendingIntent了writeToParcel().我可以使用它来访问附加的附加内容Intent吗?我的尝试readBundle: bad magic number因readParcel异常而失败:
PendingIntent pi=PendingIntent.getBroadcast(this, id,i, 0);
Parcel out = Parcel.obtain();
pi.writeToParcel(out, 0);
i.readFromParcel(out);
Run Code Online (Sandbox Code Playgroud)
我怀疑这可能是因为我正在输出一个PendingIntent但是试图将它读回来Intent.
另一个想法是我可以调用send()PendingIntent来使它立即被传递,传递一个Intent带有新键的new来添加.然后在处理程序中,我将不得不遍历intent的额外内容中的所有键.然后PendingIntent,AlarmManager如果还没有时间进行实际处理,则需要重新发布.
好吧,我终于找到了解决这个问题的方法。
似乎不可能Intent从 a获取PendingIntent,但可以在Intent传递的 to中添加额外内容getBroadcast()- 重要的是最后一个参数(标志)为零,这样它就不会覆盖现有的额外内容。
此外,附加项包含名称/值对,并且添加的新密钥与现有Intent. 这意味着removeExtra()完成后必须调用该函数,以便在下次之前删除密钥。然后调用send()自己PendingIntent的目标,然后在收到意图时就可以访问新的和旧的额外内容。然后可以将这两个额外的内容收集到一个新的中Intent,然后AlarmManager可以调用它们来重新安排。
| 归档时间: |
|
| 查看次数: |
10790 次 |
| 最近记录: |