PendingIntent的通知傳送

2022-07-13 04:45:12 字數 953 閱讀 7878

關於pendingintent傳值的問題,自己又發現了一些新的實現方法

現在我有這麼個需求:

伺服器不停的向客戶端push訊息,客戶端在開機時或客戶端啟動時會開啟乙個service來接收伺服器push下來的訊息,客戶端接收訊息後向使用者傳送通知提示使用者有新的訊息,並且訊息中帶有引數。使用者通過點選通知可以啟動主程式,並且接收到相應的引數。

注:如果使用者不是點選通知,而是通過其他方式進入程式則不能獲取到引數。

從上述需求可以onnewintent已經不滿足要求了。因為onnewintent的啟動是在startactivity執行的時候才被觸發,也就是主程式必須已經啟動了。主程式沒有啟動,點選通知啟動主程式,由於主程式是第一啟動,肯定不會觸發startactivity,所以onnewintent也不會被執行,那麼引數也不不能獲取到。

如果在主程式沒有啟動的時候點選通知,程式啟動想獲取到通知中攜帶的引數,我想到的解決方案如下(簡單描述下):

intent intent = new intent(notification_action);

bundle bundle = new bundle();

bundle.putstring("str", pstr);

intent.putextras(bundle);

pendingintent pendingintent = pendingintent.getbroadcast(context, pid, intent, pendingintent.flag_update_current);

getbroadcast方法發出廣播,這樣在service中可以接收到所發出的廣播來獲取其中intent中攜帶的資料,然後再執行其他的邏輯。
使用通知傳送廣播的機制可以避免activity是單例的問題、主程式沒有啟動獲取引數的需求,同時還可以區分主程式的啟動是從通知啟動還是直接點圖示啟動。
(水平有限,有更好解決方案的麻煩告知)

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...