PendingIntent的Flags

PendingIntent是一個Intent的描述、包裝,給予了這個PendingIntent 的組件在指定的事件發生或指定的時間到達時啓動Activty、Service或者Broadcast。

根據是要啓動Activity、Service還是Broadcast分別對應一個獲取PendingIntent的方法

public static PendingIntent getActivity(Context context, int requestCode,

            Intent intent, int flags)


public static PendingIntent getBroadcast(Context context, int requestCode,

            Intent intent, int flags)

;

public static PendingIntent getService(Context context, int requestCode,
            Intent intent, int flags) 


三個函數的參數都相同,其中最後一個參數flags在文檔中是這樣解析的:


flags:  May beFLAG_ONE_SHOT,FLAG_NO_CREATE,FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT, or any of the flags as  supported by Intent.fillIn() to control which unspecified parts of the intent that can be supplied when the actual send happens.

目前爲止只提供FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT這四個flag


FLAG_ONE_SHOT:this PendingIntent can only be used once. If set, after send() is called on it, it will be automatically canceled for you and any future attempt to send through it will fail.


FLAG_NO_CREATE:if the described PendingIntent does not already exist, then simply return null instead of creating it.


FLAG_CANCEL_CURRENT:if the described PendingIntent already exists, the current one is canceled before generating a new one. You can use this to retrieve a new PendingIntent when you are only changing the extra data in the Intent; by canceling the previous pending intent, this ensures that only entities given the new data will be able to launch it. If this assurance is not an issue, consider FLAG_UPDATE_CURRENT.


FLAG_UPDATE_CURRENT: if the described PendingIntent already exists, then keep it but its replace its extra data with what is in this new Intent. This can be used if you are creating intents where only the extras change, and don't care that any entities that received your previous PendingIntent will be able to launch it with your new extras even if they are not explicitly given to it.


上面4個flag中最經常使用的是FLAG_UPDATE_CURRENT,因爲描述的Intent有更新的時候需要用到這個flag去更新你的描述,否則組件在下次事件發生或時間到達的時候extras永遠是第一次Intent的extras。使用FLAG_CANCEL_CURRENT也能做到更新extras,只不過是先把前面的extras清除,另外FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT的區別在於能否新new一個Intent,FLAG_UPDATE_CURRENT能夠新new一個Intent,而FLAG_CANCEL_CURRENT則不能,只能使用第一次的Intent。是否更新還取決於第二個參數,如果第二個


另外兩flag就比較少用,利用FLAG_ONE_SHOT獲取的PendingIntent只能使用一次,即使再次利用上面三個方法重新獲取,再使用PendingIntent也將失敗,利用FLAG_NO_CREAT獲取的PendingIntent若描述的Intent不存在則返回NULL值.

注意當需要發送不同的pendingIntent 的時候 必須設置不同的  requestCode .否者將會出現可能多次發送的是同一個intent事件


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章