pendingIntent
2019獨角獸企業重金招聘Python工程師標準>>>
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的執行等等。Android的狀態欄通知(Notification)
如果需要查看消息,可以拖動狀態欄到屏幕下方即可查看消息。
步驟:
1獲取通知管理器NotificationManager,它也是一個系統服務
2建立通知Notification?notification?=?new?Notification(icon,?null,?when);
3為新通知設置參數(比如聲音,震動,燈光閃爍)
4把新通知添加到通知管理器
發送消息的代碼如下:
//獲取通知管理器
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和當前Application的Context。正由于PendingIntent中保存有當前Application的Context,使它賦予帶他程序一種執行的Intent的能力,就算在執行時當前Application已經不存在了,也能通過存在PendingIntent里的Context照樣執行Intent。
?
PendingIntent的一個很好的例子:
SmsManager的用于發送短信的方法:
sendTextMessage(destinationAddress,?scAddress,?text,?sentIntent,?deliveryIntent);
第一個參數:destinationAddress對方手機號碼
第二個參數:scAddress短信中心號碼一般設置為空
第三個參數:text短信內容
第四個參數:sentIntent判斷短信是否發送成功,如果你沒有SIM卡,或者網絡中斷,則可以通過這個itent來判斷。注意強調的是“發送”的動作是否成功。那么至于對于對方是否收到,另當別論
第五個參數:deliveryIntent當短信發送到收件人時,會收到這個deliveryIntent。即強調了“發送”后的結果
就是說是在"短信發送成功"和"對方收到此短信"才會激活sentIntent和deliveryIntent這兩個Intent。這也相當于是延遲執行了Intent
上面兩個例子可以理解,PendingIntent就是一個可以在滿足一定條件下執行的Intent,它相比于Intent的優勢在于自己攜帶有Context對象,這樣他就不必依賴于某個activity才可以存在。
flags有四個取值:
int?FLAG_CANCEL_CURRENT:如果該PendingIntent已經存在,則在生成新的之前取消當前的。
int?FLAG_NO_CREATE:如果該PendingIntent不存在,直接返回null而不是創建一個PendingIntent.
int?FLAG_ONE_SHOT:該PendingIntent只能用一次,在send()方法執行后,自動取消。
int?FLAG_UPDATE_CURRENT:如果該PendingIntent已經存在,則用新傳入的Intent更新當前的數據。
我們需要把最后一個參數改為PendingIntent.FLAG_UPDATE_CURRENT,這樣在啟動的Activity里就可以用接收Intent傳送數據的方法正常接收。
?
轉載于:https://my.oschina.net/wrs/blog/212491
總結
以上是生活随笔為你收集整理的pendingIntent的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python xlrd 读取xls文件
- 下一篇: java笔记之数组的概念、声明、初始化、