PendingIntent可以看作是對Intent的一個封裝,但它不是立刻執(zhí)行某個行為,而是滿足某些條件或觸發(fā)某些事件后才執(zhí)行指定的行為(啟動特定Service,Activity,BrcastReceive)。
我們可以把Pending Intent交給其他程序,其他程序按照PendingIntent進行操作。
在Alarm定時器與Notification通知中都使用了PendingIntent
1.獲得PendingIntent類內(nèi)部靜態(tài)方法獲得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)
//獲得一個用于發(fā)送特定Broadcast的PendingIntent
public static?PendingIntent?getBroadcast(Context?context, int requestCode,Intent?intent, int flags)
參數(shù)說明:
context:上下文對象。
requstCode:請求碼,發(fā)件人的私人請求代碼(當(dāng)前未使用)。
intent:請求意圖。用于要指明要啟動的類以及數(shù)據(jù)的傳遞;
flags:這是一個關(guān)鍵的標(biāo)志位:
主要常量
FLAG_CANCEL_CURRENT:如果當(dāng)前系統(tǒng)中已經(jīng)存在一個相同的PendingIntent對象,那么就將先將已有的PendingIntent取消,然后重新生成一個PendingIntent對象。
FLAG_NO_CREATE:如果當(dāng)前系統(tǒng)中不存在相同的PendingIntent對象,系統(tǒng)將不會創(chuàng)建該PendingIntent對象而是直接返回null。
FLAG_ONE_SHOT:該PendingIntent只作用一次。在該PendingIntent對象通過send()方法觸發(fā)過后,PendingIntent將自動調(diào)用cancel()進行銷毀,那么如果你再調(diào)用send()方法的話,系統(tǒng)將會返回一個SendIntentException。
FLAG_UPDATE_CURRENT:如果系統(tǒng)中有一個和你描述的PendingIntent對等的PendingInent,那么系統(tǒng)將使用該PendingIntent對象,但是會使用新的Intent來更新之前PendingIntent中的Intent對象數(shù)據(jù),例如更新Intent中的Extras。