pendingIntent簡單理解

pendingIntent字面意義:等待的,未決定的Intent。
要獲得一個pendingIntent對象,使用方法類的靜態方法 getActivity(Context, int, Intent, int),getBroadcast(Context, int, Intent, int)getService(Context, int, Intent, int)  分別對應着Intent的3個行爲,跳轉到一個activity組件、打開一個廣播組件和打開一個服務組件。
參數有4個,比較重要的事第三個和第一個,其次是第四個和第二個。能夠看到,要獲得這個對象,必須傳入一個Intent做爲參數,必須有context做爲參數。
pendingIntent是一種特殊的Intent。主要的區別在於Intent的執行馬上的,而pendingIntent的執行不是馬上的。pendingIntent執行的操做實質上是參數傳進來的Intent的操做,可是使用pendingIntent的目的在於它所包含的Intent的操做的執行是須要知足某些條件的。
主要的使用的地方和例子:通知Notificatio的發送,短消息SmsManager的發送和警報器AlarmManager的執行等等。
html

Android的狀態欄通知(Notification)android

若是須要查看消息,能夠拖動狀態欄到屏幕下方便可查看消息。網絡

步驟:app

獲取通知管理器NotificationManager,它也是一個系統服務this

創建通知Notification notification = new Notification(icon, null, when);spa

爲新通知設置參數(好比聲音,震動,燈光閃爍)code

把新通知添加到通知管理器orm

發送消息的代碼以下:htm

//獲取通知管理器對象

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)

int icon = android.R.drawable.stat_notify_chat;

long when = System.currentTimeMillis();//通知發生的時間爲系統當前時間

//新建一個通知,指定其圖標和標題

Notification notification = new Notification(icon, null, when);//第一個參數爲圖標,第二個參數爲短暫提示標題,第三個爲通知時間

notification.defaults = Notification.DEFAULT_SOUND;//發出默認聲音

notification.flags |= Notification.FLAG_AUTO_CANCEL;//點擊通知後自動清除通知

Intent openintent = new Intent(this, OtherActivity.class);

PendingIntent contentIntent = PendingIntent.getActivity(this, 0, openintent, 0);//當點擊消息時就會向系統發送openintent意圖

notification.setLatestEventInfo(this, 「標題」, 「我是內容", contentIntent);

mNotificationManager.notify(0, notification);//第一個參數爲自定義的通知惟一標識

 

重點是setLatestEventInfo( )方法的最後一個參數!!!!它是一個PendingIntent!!!!!!!!!

這裏使用到了PendingIntent(pend本意是待定,不肯定的意思)

PendingIntent能夠看做是對Intent的包裝。PendingIntent主要持有的信息是它所包裝的Intent和當前ApplicationContext。正因爲PendingIntent中保存有當前ApplicationContext,使它賦予帶他程序一種執行的Intent的能力,就算在執行時當前Application已經不存在了,也能經過存在PendingIntent裏的Context照樣執行Intent

 

PendingIntent的一個很好的例子:

SmsManager的用於發送短信的方法:

sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);

第一個參數:destinationAddress 對方手機號碼

第二個參數:scAddress 短信中心號碼 通常設置爲空

第三個參數:text 短信內容

第四個參數:sentIntent判斷短信是否發送成功,若是你沒有SIM卡,或者網絡中斷,則能夠經過這個itent來判斷。注意強調的是「發送」的動做是否成功。那麼至於對於對方是否收到,另當別論

第五個參數:deliveryIntent當短信發送到收件人時,會收到這個deliveryIntent。即強調了「發送」後的結果

就是說是在"短信發送成功""對方收到此短信"纔會激活 sentIntentdeliveryIntent這兩個Intent。這也至關因而延遲執行了Intent


上面兩個例子能夠理解,PendingIntent就是一個能夠在知足必定條件下執行的Intent,它相比於Intent的優點在於本身攜帶有Context對象,這樣他就沒必要依賴於某個activity才能夠存在。

相關文章
相關標籤/搜索