我已經安排PendingIntent
與AlarmManager
。當AlarmManager
提供Intent
時,我能夠getExtras()
我最初發送的所有數據。如何獲取已掛起的PendingIntent的Intent附加項?
但是,有時我會在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相同。唯一的問題是,當我撥打getExtras()
時,它總是返回空值。這似乎是我經常看到的問題的反面,其中Intent
將被緩存,這是不希望的。在這種情況下,其實我是想獲得緩存Intent
並獲得價值它,因爲Intent
正在等待它應該仍然存在。
我該怎麼做?
一對夫婦的想法,我有過和/或審判。一個圍繞Intent.fillIn()
函數,我是否可以用它來表示它應該(或不應該)覆蓋額外信息,以便我可以檢索原始信息。
看遠一點,我看到PendingIntent
有writeToParcel()
。我可以用它來獲得附件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
添加一個新密鑰。然後在處理程序中,我將不得不迭代所有意圖附加關鍵字。如果還沒有進行實際處理,則需要重新發出PendingIntent
到AlarmManager
。
我在這裏面對的差不多:http://stackoverflow.com/q/31078345/406110 – Richard