基礎用途概述
Notification,是一種具有全局效果的通知,可以在系統的通知欄中顯示。當 APP 向系統發出通知時,它將先以圖標的形式顯示在通知欄中。用戶可以下拉通知欄查看通知的詳細信息。通知欄和抽屜式通知欄均是由系統控制,用戶可以隨時查看。
通知與四大組件的關系:
比如音樂播放器中,后臺播放音樂,由于 service 是在后臺運行,所以意圖做什么我們看不到,這個時候可以通過 Notificaiton 來顯示提醒。
同樣,在音樂播放器中,程序在后臺運行,點擊音樂播放器的通知欄上的上一曲,下一曲等,那么可以讓 service 服務和 BroadcastReceiver 廣播相結合
Intent 作為意圖處理,和 Notificaiton 的點擊時間緊密結合在了一起,并且與 BroadcastReceiver 和 service 的聯系也緊密不可以分割。
(service 在后臺之后通過 BroadcastReceiver 來通知 Notificaiton 顯示相關東西,在通過 Intent 完成用戶的意圖操作)
常見的用途:
1 顯示接收到短消息、及時消息等信息(如QQ、微信、新浪、短信)
2 顯示客戶端的推送消息,如廣告、優惠、版本更新、推薦新聞等,常用的第三方 SDK 有: JPush 、 個推 、 信鴿 、 網易云信(偏重 IM ) 、 阿里云推送
3 顯示正在進行的事物,例如:后臺運行的程序,如音樂播放進度、下載進度等
Notification的基本使用
通知欄主要的類:Notification 和 NotificationManager
NotificationManager : ?是狀態欄通知的管理類,負責發通知、清除通知等操作。
Notification 為通知信息類,它里面對應了通知欄的各個屬性【備注:使用建造者模式構建 Notification 對象。由于 Notification.Builder 僅支持 Android 4.1及之后的版本,為了解決兼容性問題, Google 在 Android Support v4 中加入了 NotificationCompat.Builder 類。
Notification創建必要的屬性,必須添加的屬性:
小圖標,通過 setSmallIcon() 方法設置
標題,通過 setContentTitle() 方法設置
內容,通過 setContentText() 方法設置
Notification 創建步驟:
Notification 的創建主要涉及到 Notification.Builder 、Notification 、NotificationManager。
Notification.Builer : 使用建造者模式構建 Notification 對象。由于 Notification.Builder 僅支持 Android 4.1及之后的版本,為了解決兼容性問題, Google 在 Android Support v4 中加入了 - NotificationCompat.Builder 類。對于某些在 Android 4.1 之后才特性,即使 NotificationCompat.Builder 支持該方法,在之前的版本中也不能運行。
Notification : 通知對應類,保存通知相關的數據。
NotificationManager : NotificationManager 是通知管理類,向系統發送通知時會用到。它是一個系統服務。調用 NotificationManager 的 notify() 方法可以向系統發送通知。
Notification 創建代碼:
1 創建NotificationManager
創建NotificationManager
2 創建Notification.Builder,使用的是建造者模式
創建Notification.Builder
3 創建PendingIntent,處理點擊通知之后的邏輯
創建PendingIntent
4 給Notification.Builder設置PendingIntent,然后發送通知
發送通知
Notification自定義布局(RemoteViews)
1 創建RemoteViews,并設置點擊監聽
創建RemoteViews
根據requestCode創建PendingIntent
2 把通知欄布局設置為remoteViews,就完成了自定義通知欄
設置通知欄布局
Notification細節
更新 Notification
更新通知很簡單,只需要再次發送相同 ID 的通知即可,如果之前的通知還未被取消,則會直接更新該通知相關的屬性;如果之前的通知已經被取消,則會重新創建一個新通知。
更新通知跟發送通知使用相同的方式。
取消 Notification
點擊通知欄的清除按鈕,會清除所有可清除的通知
設置了 setAutoCancel() 或 FLAG_AUTO_CANCEL 的通知,點擊該通知時會清除它
通過 NotificationManager 調用 cancel(int id) 方法清除指定 ID 的通知
通過 NotificationManager 調用 cancel(String tag, int id) 方法清除指定 TAG 和 ID 的通知
通過 NotificationManager 調用 cancelAll() 方法清除所有該應用之前發送的通知
注意事項
如果你是通過 NotificationManager.notify(String tag, int id, Notification notify) 方法創建的通知,那么只能通過 NotificationManager.cancel(String tag, int id) 方法才能清除對應的通知,調用NotificationManager.cancel(int id) 無效。
設置 flag 屬性
設置 FLAG_NO_CLEAR 表示設置通知不能被狀態欄的清除按鈕給清除掉,也不能被手動清除,但能通過 cancel() 方法清除notification.flags |= Notification.FLAG_NO_CLEAR;
取消全部通知:
if(mNotificationManager!=null){
? ?mNotificationManager.cancelAll();
}
設置 Notification 的通知效果
Notification 有震動、響鈴、呼吸燈三種響鈴效果,可以通過 setDefaults(int defualts) 方法來設置。 Default 屬性有以下四種,一旦設置了 Default 效果,自定義的效果就會失效。
//設置系統默認提醒效果,一旦設置默認提醒效果,則自定義的提醒效果會全部失效。具體可看源碼//添加默認震動效果,需要申請震動權限//
Notification.DEFAULT_VIBRATE
//添加系統默認聲音效果,設置此值后,調用setSound()設置自定義聲音無效
Notification.DEFAULT_SOUND
//添加默認呼吸燈效果,使用時須與 Notification.FLAG_SHOW_LIGHTS 結合使用,否則無效
Notification.DEFAULT_LIGHTS
//添加上述三種默認提醒效果
Notification.DEFAULT_ALL
除了以上幾種設置 Notification 默認通知效果,還可以通過以下幾種 FLAG 設置通知效果。
//提醒效果常用 Flag//三色燈提醒,在使用三色燈提醒時候必須加該標志符
Notification.FLAG_SHOW_LIGHTS
//發起正在運行事件(活動中)
Notification.FLAG_ONGOING_EVENT
//讓聲音、振動無限循環,直到用戶響應 (取消或者打開)
Notification.FLAG_INSISTENT
//發起Notification后,鈴聲和震動均只執行一次
Notification.FLAG_ONLY_ALERT_ONCE
//用戶單擊通知后自動消失
Notification.FLAG_AUTO_CANCEL
//只有調用NotificationManager.cancel()時才會清除
Notification.FLAG_NO_CLEAR
//表示正在運行的服務
Notification.FLAG_FOREGROUND_SERVICE
寫在最后
android o和android p對通知欄的改動頻繁,如需適配可以查閱官方文檔。
http://developer.android.com/design/patterns/notifications.html