用PendingIntent傳送資料丟失解決辦法

2021-09-06 12:45:50 字數 1710 閱讀 6703

當要設定乙個鬧鐘時,可以把資料放在intent裡,再用intent物件生成乙個pendingintent物件,然後用alarmmanager 來邦定pendingintent物件設定鬧鐘,具體**如下:

intent intent = new intent(context, alarmreceiver.class);

intent.putextra("id", alarm.getid());

intent.putextra("weekday", getcurrentweekday());

pendingintent pendingintent = pendingintent.getbroadcast(context, alarm.getid(), intent, 0);

alarmmanager alarmmanager = (alarmmanager) context.getsystemservice(context.alarm_service);

alarmmanager.set(alarmmanager.rtc_wakeup, triggerattime, pendingintent);

鬧鐘設定的**基本上是這樣的,但是如果在啟動的broadcast中接收intent過來的資料,有時會得到乙個null值,也就是說,根本沒有資料傳過來。

因此檢視官方api,發現 pendingintent pendingintent = pendingintent.getbroadcast(context, alarm.getid(), intent, 0);的最後乙個引數引數是int flag,這個值可以是flag_one_shot, flag_no_create, flag_cancel_current, flag_update_current

簡單翻譯一下:

int flag_cancel_current:如果該pendingintent已經存在,則在生成新的之前取消當前的。

int flag_no_create:如果該pendingintent不存在,直接返回null而不是建立乙個pendingintent.

int flag_one_shot:該pendingintent只能用一次,在send()方法執行後,自動取消。

int flag_update_current:如果該pendingintent已經存在,則用新傳入的intent更新當前的資料。

我們需要把最後乙個引數改為pendingintent.flag_update_current,這樣在啟動的activity裡就可以用接收intent傳送資料的方法正常接收。

intent intent = new intent(context, alarmreceiver.class);

intent.putextra("id", alarm.getid());

intent.putextra("weekday", getcurrentweekday());

pendingintent pendingintent = pendingintent.getbroadcast(context, alarm.getid(), intent,endingintent.flag_update_current);

alarmmanager alarmmanager = (alarmmanager) context.getsystemservice(context.alarm_service);

alarmmanager.set(alarmmanager.rtc_wakeup, triggerattime, pendingintent);

Intent和PendingIntent的區別

intent英文意思是意圖,pending表示即將發生或來臨的事情。pendingintent這個類用於處理即將發生的事情。比如在通知notification中用於跳轉頁面,但不是馬上跳轉。intent 是及時啟動,intent 隨所在的activity 消失而消失。intent一般是用作activ...

PendingIntent用法注意

pendingintent.flag cancel current pendingintent可以由三種動作得到相應的例項 getactivity context,int,intent,int getactivities context,int,intent,int getbroadcast con...

Intent和PendingIntent的區別

intent英文意思是意圖,pending表示即將發生或來臨的事情。pendingintent這個類用於處理即將發生的事情。比如在通知notification中用於跳轉頁面,但不是馬上跳轉。intent 是及時啟動,intent 隨所在的activity 消失而消失。intent一般是用作activ...