我已经安排了一个PendingIntent
with 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?
我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);
我怀疑这可能是因为我正在输出 aPendingIntent
但试图将其作为Intent
.
另一个想法是我可以调用 send()PendingIntent
以使其立即交付,并传递一个Intent
带有新键的新键来添加。然后在处理程序中,我必须遍历意图附加项中的所有键。PendingIntent
然后,AlarmManager
如果还没有时间进行实际处理,则需要重新发出。