PendingIntent可以看作是對Intent的一個封裝,但它不是立刻執行某個行爲,而是滿足某些條件或觸發某些事件後才執行指定的行爲(啓動特定Service,Activity,BrcastReceive)。
我們可以把Pending Intent交給其他程序,其他程序按照PendingIntent進行操作。
在Alarm定時器與Notification通知中都使用了PendingIntent
1.獲得PendingIntent類內部靜態方法獲得PendingIntent實例:
//獲得一個用於啓動特定Activity的PendingIntent
public static PendingIntent getActivity(Context context, int requestCode,Intent intent, int flags)
//獲得一個用於啓動特定Service的PendingIntent
public static PendingIntent getService(Context context, int requestCode,Intent intent, int flags)
//獲得一個用於發送特定Broadcast的PendingIntent
public static PendingIntent getBroadcast(Context context, int requestCode,Intent intent, int flags)
參數說明:
context:上下文對象。
requstCode:請求碼,發件人的私人請求代碼(當前未使用)。
intent:請求意圖。用於要指明要啓動的類以及數據的傳遞;
flags:這是一個關鍵的標誌位:
主要常量
FLAG_CANCEL_CURRENT:如果當前系統中已經存在一個相同的PendingIntent對象,那麼就將先將已有的PendingIntent取消,然後重新生成一個PendingIntent對象。
FLAG_NO_CREATE:如果當前系統中不存在相同的PendingIntent對象,系統將不會創建該PendingIntent對象而是直接返回null。
FLAG_ONE_SHOT:該PendingIntent只作用一次。在該PendingIntent對象通過send()方法觸發過後,PendingIntent將自動調用cancel()進行銷燬,那麼如果你再調用send()方法的話,系統將會返回一個SendIntentException。
FLAG_UPDATE_CURRENT:如果系統中有一個和你描述的PendingIntent對等的PendingInent,那麼系統將使用該PendingIntent對象,但是會使用新的Intent來更新之前PendingIntent中的Intent對象數據,例如更新Intent中的Extras。