Android Notification基本使用

基礎用途概述

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容