Android中pendingIntent與Intent的深入分析
Android中pendingIntent的深入分析
pendingIntent字面意義:等待的,未決定的Intent。
要得到一個pendingIntent對象,使用方法類的靜態(tài)方法 getActivity(Context, int, Intent, int),getBroadcast(Context, int, Intent, int),getService(Context, int, Intent, int) 分別對應(yīng)著Intent的3個行為,跳轉(zhuǎn)到一個activity組件、打開一個廣播組件和打開一個服務(wù)組件。
參數(shù)有4個,比較重要的事第三個和第一個,其次是第四個和第二個??梢钥吹?,要得到這個對象,必須傳入一個Intent作為參數(shù),必須有context作為參數(shù)。
pendingIntent是一種特殊的Intent。主要的區(qū)別在于Intent的執(zhí)行立刻的,而pendingIntent的執(zhí)行不是立刻的。pendingIntent執(zhí)行的操作實質(zhì)上是參數(shù)傳進來的Intent的操作,但是使用pendingIntent的目的在于它所包含的Intent的操作的執(zhí)行是需要滿足某些條件的。
主要的使用的地方和例子:通知Notificatio的發(fā)送,短消息SmsManager的發(fā)送和警報器AlarmManager的執(zhí)行等等。
Android的狀態(tài)欄通知(Notification)
如果需要查看消息,可以拖動狀態(tài)欄到屏幕下方即查看消息。
步驟:
1獲取通知管理器NotificationManager,它也是一個系統(tǒng)服務(wù)
2建立通知Notification notification = new Notification(icon, null, when);
3為新通知設(shè)置參數(shù)(比如聲音,震動,燈光閃爍)
4把新通知添加到通知管理器
發(fā)送消息的代碼如下:
//獲取通知管理器 NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE) int icon = android.R.drawable.stat_notify_chat; long when = System.currentTimeMillis();//通知發(fā)生的時間為系統(tǒng)當(dāng)前時間 //新建一個通知,指定其圖標(biāo)和標(biāo)題 Notification notification = new Notification(icon, null, when);//第一個參數(shù)為圖標(biāo),第二個參數(shù)為短暫提示標(biāo)題,第三個為通知時間 notification.defaults = Notification.DEFAULT_SOUND;//發(fā)出默認聲音 notification.flags |= Notification.FLAG_AUTO_CANCEL;//點擊通知后自動清除通知 Intent openintent = new Intent(this, OtherActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, openintent, 0);//當(dāng)點擊消息時就會向系統(tǒng)發(fā)送openintent意圖 notification.setLatestEventInfo(this, “標(biāo)題”, “我是內(nèi)容", contentIntent); mNotificationManager.notify(0, notification);//第一個參數(shù)為自定義的通知唯一標(biāo)識
重點是setLatestEventInfo( )方法的最后一個參數(shù)?。。?!它是一個PendingIntent!!!!!!!!!
這里使用到了PendingIntent(pend本意是待定,不確定的意思)
PendingIntent可以看作是對Intent的包裝。PendingIntent主要持有的信息是它所包裝的Intent和當(dāng)前Application的Context。正由于PendingIntent中保存有當(dāng)前Application的Context,使它賦予帶他程序一種執(zhí)行的Intent的能力,就算在執(zhí)行時當(dāng)前Application已經(jīng)不存在了,也能通過存在PendingIntent里的Context照樣執(zhí)行Intent。
PendingIntent的一個很好的例子:
SmsManager的用于發(fā)送短信的方法:
sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
第一個參數(shù):destinationAddress對方手機號碼
第二個參數(shù):scAddress短信中心號碼一般設(shè)置為空
第三個參數(shù):text短信內(nèi)容
第四個參數(shù):sentIntent判斷短信是否發(fā)送成功,如果你沒有SIM卡,或者網(wǎng)絡(luò)中斷,則可以通過這個itent來判斷。注意強調(diào)的是“發(fā)送”的動作是否成功。那么至于對于對方是否收到,另當(dāng)別論
第五個參數(shù):deliveryIntent當(dāng)短信發(fā)送到收件人時,會收到這個deliveryIntent。即強調(diào)了“發(fā)送”后的結(jié)果
就是說是在"短信發(fā)送成功"和"對方收到此短信"才會激活 sentIntent和deliveryIntent這兩個Intent。這也相當(dāng)于是延遲執(zhí)行了Intent
上面兩個例子可以理解,PendingIntent就是一個可以在滿足一定條件下執(zhí)行的Intent,它相比于Intent的優(yōu)勢在于自己攜帶有Context對象,這樣他就不必依賴于某個activity才可以存在。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Android使用自定義view在指定時間內(nèi)勻速畫一條直線的實例代碼
這篇文章主要介紹了Android使用自定義view在指定時間內(nèi)勻速畫一條直線的實例代碼,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05Android實現(xiàn)單頁顯示3個Item的ViewPager炫酷切換效果
這篇文章主要為大家詳細介紹了Android實現(xiàn)單頁顯示3個Item的ViewPager炫酷切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10Android開發(fā)中超好用的正則表達式工具類RegexUtil完整實例
這篇文章主要介紹了Android開發(fā)中超好用的正則表達式工具類RegexUtil,結(jié)合完整實例形式分析了Android正則表達式常見操作技巧,包括針對證件號、銀行賬號、手機號、郵編等的正則判斷相關(guān)操作技巧,需要的朋友可以參考下2017-11-11Android編程基礎(chǔ)之簡單Button事件響應(yīng)綜合提示控件Toast應(yīng)用示例
這篇文章主要介紹了Android編程基礎(chǔ)之簡單Button事件響應(yīng)綜合提示控件Toast應(yīng)用,結(jié)合實例形式分析了Button事件響應(yīng)與Toast提醒的相關(guān)操作技巧,需要的朋友可以參考下2016-10-10Android應(yīng)用中炫酷的橫向和環(huán)形進度條的實例分享
這篇文章主要介紹了Android應(yīng)用中炫酷的橫向和圓形進度條的實例分享,文中利用了一些GitHub上的插件進行改寫,也是一片很好的二次開發(fā)教學(xué),需要的朋友可以參考下2016-04-04