Android Notification總結
?
目錄[-]
一、通知的主要功能
二、通知簡介
三、通知的使用流程
四、使用NotificationCompat.Builder設置通知的屬性:
五、管理通知
一、通知的主要功能
-
顯示接收到短消息、即使消息等信息 (如QQ、微信、新浪、短信等),此類消息一般有多條時會采用摘要的形式顯示,展開則顯示通知詳情;
-
顯示客戶端的推送消息(如新版本發布,廣告,推薦新聞等)
-
顯示正在進行的事物,一般在通知中顯示進度條,顯示后臺程序運行進度(如音樂播放器、新版本下載進度等)
二、通知簡介
-
基本布局:
-
普通視圖的通知
-
BigView視圖的通知(此類通知需要通過setStyle屬性設置,摘要區可以添加自定義的操作)
-
-
-
相關類:使用通知的時候主要涉及兩個類:Notification 和 NotificationManager(一般為了拓寬通知的適用范圍,推薦使用支持庫中的通知類NotificationCompat和NotificationCompat.Builder)
-
Notification :通知類,該類中包含通知的各種屬性和方法;一般通過NotificationCompat.Builder設置通知的各個屬性值
-
NotificationManager:狀態欄通知管理類,該類負責應用中所有通知的發送、清除等管理操作;該類是一個系統服務,需要通過?(NotificationManager)getSystemService(NOTIFICATION_SERVICE)方法獲得;
-
三、通知的使用流程
-
?通過NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)獲得一個通知的Builder對象;
-
調用mBuilder的方法設置通知屬性,如setSmallIcon(int drawable)、satContentTitle(CharSquence title)等為通知設置小圖標、內容標題;
-
通過mBuilder.build()方法獲得一個Notification對象;
-
獲得一個通知管理器NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE),通過nm.notify(int id, Notification notification)方法發送通知,至此,通知便已經發送出去
四、使用NotificationCompat.Builder設置通知的屬性:
RemoteViews?remoteView?=?new?RemoteViews(mContext.getPackageName(),?R.layout.custom_notification);
Bitmap?mBitmap?=?BitmapFactory.decodeResource(mContext.getResources(),?R.drawable.ic_summary_notice);
Intent?intent?=?new?Intent(mContext,?IconifyActivity.class);
PendingIntent?pendingIntent?=?PendingIntent.getActivity(mContext,?0,?intent,?PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder?mBuilder?=?new?NotificationCompat.Builder(mContext).setTicker("ticker")????????????????//新來通知時在狀態欄現實的文本.setContentTitle("content?title")??//設置通知標題.setContentText("content?text")????????//設置通知文本.setSmallIcon(R.drawable.ic_notice_1)??//設置通知左上角小圖標.setContentIntent(pendingIntent)????//設置點擊通知的操作.setDeleteIntent(pendingIntent)????????//設置刪除通知時的操作.setWhen(System.currentTimeMillis())?//設置通知上的時間戳.setProgress(0,?0,?true)???//設置進度條.setStyle(new?NotificationCompat.BigTextStyle())???//設置通知樣式,主要包括默認樣式、BigTextStyle、BigPictureStyle和InboxStyle.setContent(remoteView)????????????????//設置通知使用自定義的視圖,而非系統默認視圖.setLargeIcon(mBitmap)??????????//設置通知大圖標.setAutoCancel(true)????????????????//設置用戶點擊通知后是否自動清除通知,true:清除;false:不清.setNumber(count)????????????????????//設置通知右下角顯示的數字.setDefaults(NotificationCompat.DEFAULT_ALL)????//設置應用于通知上的默認動作,如聲音、三色燈、振動等.setLights(0x0000ff,?300,?300)//設置通知三色燈.setVibrate(new?long[]{0,?300,?500,?700})????//自定義振動.setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))????//自定義通知提示音.setOngoing(false)????????????????????//設置是否為一個后臺任務,默認為否;true表示是一個正在進行的后臺任務,如音樂播放、文件下載、數據同步等.setPriority(NotificationCompat.PRIORITY_DEFAULT)????//設置該通知相對重要性.setColor(0x00ff00)????????????????????//設置通知顏色.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)???//設置通知的可見性,取值為VISIBILITY_PRIVATE(默認)、VISIBILITY_PUBLIC、VISIBILITY_SECRET中的一種.setContentInfo("content?info")????????//設置通知右側的大文本內容.setFullScreenIntent(pendingIntent,?false)????//設置一個直接全屏加載的動作,而不是發送通知至通知欄.setExtras(new?Bundle())????????????//設置通知的元信息.setCategory(NotificationCompat.CATEGORY_MESSAGE)????//設置通知所屬類別.setGroup(NotificationCompat.CATEGORY_CALL)????//設置該通知為分享同一通知鍵值的通知組中的一部分.setGroupSummary(false)????????????????//設置該通知為一個通知組中的摘要通知.setUsesChronometer(false)????????????//使用計時器而非時間戳來顯示時間.setSubText("sub?text")????????????????//設置擴展視圖中的子文本內容.setLocalOnly(false)????????????????//設置該通知是否只在當前設備上顯示,默認為否.setOnlyAlertOnce(false)????????????//設置是否只提示一次.setSortKey("sort?key");????????????????//設置針對一個包內的通知進行排序的鍵值
????下面對部分方法進行詳細解釋:
-
setContentIntent(PendingIntent intent)和setDeleteIntent(PendingIntent intent):設置點擊該通知或刪除該通知時需要進行的操作,參數為一個PendingIntent ,由該PendingIntent 指定操作意圖
-
setProgress(int max, int progress, boolean indeterminate):設置通知中包含一個ProgressBar類型的進度條,注意:此方法在4.0及以后版本才有用,如果為早期版本:需要自定義通知布局,其中包含ProgressBar視圖
-
max:進度條的最大值;
-
progress:當前已完成的進度值,一般來說,當操作完成時,progress應等于max,通常將max值設為100,然后將progress值設為當前完成值占max的百分比;
-
indeterminate:一個boolean類型值,表示當前的進度條是為indeterminate(true)還是determinate(false);
-
setDefaults(int defaults):設置應用于通知上的默認提示音、震動、燈光燈,取值只能為以下三種中的一種或多種的組合,當默認燈光、震動、提示音全采用時,可以使用Notification.DEFAULT_ALL
-
Notification.DEFAULT_VIBRATE:添加默認震動提醒 ?需要 VIBRATE permission
-
Notification.DEFAULT_SOUND:添加默認聲音提醒
-
Notification.DEFAULT_LIGHTS:添加默認三色燈提醒
-
setLights(int argb, int onMs, int offMs):自定義通知提示的三色燈燈光顏色和閃爍頻率,可用于區分不同的應用場合下的通知信息;只有設置了標志符Flags為Notification.FLAG_SHOW_LIGHTS的時候,才支持三色燈提醒,同時,并非所有的設備都支持所有的燈光顏色
-
argb:三色燈的顏色
-
onMs:三色燈亮時的持續時間(單位:毫秒)
-
offMs:三色燈暗時的持續時間(單位:毫秒)
-
setVibrate(long[] pattern):設置通知的振動模式,如setVibrate(new long[] {0,300,500,700})表示延遲0ms,振動300ms,然后延遲500ms,振動700ms,以此類推
-
setSound(Uri sound):設置通知的提示音,可以是自定義的提示音,也可以是默認提示音
-
setSound(Uri.parse("file:///sdcard/xx/xx.mp3")):設置提示音為自定義的鈴聲;
-
setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "5"))表示獲取Android多媒體庫中的鈴聲;
-
setPriority(int pri):設置通知的相對優先級,系統會根據不同優先級的通知采用不同的顯示方式,從而影響用戶在不同優先級的通知上所消耗的時間及被打擾程度,不過一般來說,系統安排通知時的優先級包含多個方面,setPriority只是影響其中的一個方面,具體情況因平臺不同而稍有不同
-
pri:通知的相對優先級,一個整形值,取值范圍為-2(最低優先級)到2(最高優先級)
-
下表列出了不同優先級所對應的常量及所呈現的效果和用途
優先級 | ? |
PRIORITY_MAX(2) | 最高優先級,重要而緊急的通知,通知用戶這個事件是時間上緊迫的或者需要立即處理的 |
PRIORITY_HIGH(1) | 高優先級,用于重要的通信內容,例如短消息或者聊天,這些都是對用戶來說比較有興趣的 |
PRIORITY_DEFAULT(0) | 默認優先級,用于沒有特殊優先級分類的通知 |
PRIORITY_LOW(-1) | 低優先級,可以通知用戶但又不是很緊急的事件 |
PRIORITY_MIN(-2) | 最低優先級,用于后臺消息 (例如天氣或者位置信息);最低優先級通知將只在狀態欄顯示圖標,只有用戶下拉通知抽屜才能看到內容 |
注意:如何選擇合適的優先級?
????????DEFAULT、HIGH 和 MAX 是中斷優先級別,在活動過程中有中斷用戶的風險。 為了避免打擾應用的用戶,中斷優先級僅保留用于以下通知 :
-
涉及另一個用戶
-
時間敏感
-
可能會立即改變用戶在現實世界中的行為
LOW 和 MIN優先級通知的條件包括:
-
不涉及其他用戶
-
不屬于時間敏感型
-
包含用戶可能感興趣但可選擇在空閑時瀏覽的內容
-
setVisibility(int visibility):設置通知在鎖屏狀態下所顯示的信息詳細程度,visibility的取值為以下三種之一
-
VISIBILITY_PUBLIC: 顯示通知的完整內容
-
VISIBILITY_SECRET:鎖屏狀態下不顯示此通知的任何部分
-
VISIBILITY_PRIVATE(默認):鎖屏時顯示通知圖標和內容標題等基本信息,但是隱藏通知的完整內容,使用該值時,還可以提供其中隱藏了某些詳細信息的替換版本的通知內容
-
setFullScreenIntent(PendingIntent intent, boolean highPriority):當設置該屬性值時,所對應的通知將不會以通常所見的通知形式發送到用戶的狀態欄,而是會全屏顯示參數intent對應的意圖;這類通知一般是優先級非常高,需要用戶進行即時處理的通知,如來電、鬧鐘等,注意:如若想在其他場景中使用該類型通知,一般需要為用戶提供開關此類通知的功能,否則可能會因為過度打擾用戶而引起用戶不滿;
-
setCategory(String category):設置通知所屬的類別,category字符串必須為如下系統預定義的通知類別之一,該值主要用于系統排序和過濾
-
CATEGORY_CALL:來電(語音或視頻)或相似的同步通信請求
-
CATEGORY_MESSAGE:傳入的直接消息(短信、即時消息等)
-
CATEGORY_EMAIL:異步群發消息(電子郵件)
-
CATEGORY_EVENT:日歷事件
-
CATEGORY_PROMO:促銷或廣告
-
CATEGORY_ALARM:鬧鈴或定時器
-
CATEGORY_PROGRESS:長時間運行的后臺操作的進度
-
CATEGORY_SOCIAL:社交網絡或共享更新
-
CATEGORY_ERROR:后臺操作或身份驗證狀態中的錯誤
-
CATEGORY_TRANSPORT:媒體傳輸播放控制
-
CATEGORY_SYSTEM:系統或設備狀態更新。保留給系統使用
-
CATEGORY_SERVICE:正在運行的后臺服務的指示
-
CATEGORY_RECOMMENDATION:對于某個事件的特定、及時建議。例如,新聞應用可能會建議用戶接下來可能想要閱讀的新話題
-
CATEGORY_STATUS:有關設備或上下文狀態的持續信息
五、管理通知
-
刪除通知:除非發生以下情況之一,否則通知仍然可見:
-
用戶單獨或通過使用“全部清除”清除了該通知(如果通知可以清除);
-
用戶點擊通知,且在創建通知時調用了 setAutoCancel(true);
-
針對特定的通知 ID 調用了 cancel(),此方法還會刪除當前通知;
-
調用了 cancelAll() 方法,該方法將刪除之前發出的所有通知;
-
浮動通知:對于 Android 5.0(API 級別 21),當設備處于活動狀態時(即設備未鎖定且其屏幕已打開),通知可以顯示在小型浮動窗口中(也稱為“浮動通知”)。 這些通知看上去類似于精簡版的通知,只是浮動通知還顯示操作按鈕。 用戶可以在不離開當前應用的情況下處理或清除浮動通知。可能觸發浮動通知的情況有:
-
用戶的 Activity 處于全屏模式中;
-
通知的優先級字段設置為 PRIORITY_MAX 或 PRIORITY_HIGH 且通知設置有聲音或振動;
浮動通知的使用范例有:使用設備時來電,使用設備時鬧鈴,新的短信,電池電量過低
? ?
-
注意事項:
-
雖然Android 支持在通知底部顯示可選的操作,但在使用這一功能時需要注意對操作進行篩選,一般,通知中應只包含最重要且有意義的操作,適合在通知中使用的操作為:對正在顯示的內容類型必要、常用且常見;讓用戶可以迅速完成任務;而那些語義含義模糊或跟通知的默認操作一樣的操作則不適合添加在通知中
-
注意利用通知的排名和排序:
? ? ? ? ?通知屬于新聞,因此基本以時間倒序顯示,并且會特別考慮應用規定的通知優先級。?通知是鎖定屏幕的關鍵部分,并且在設備顯示屏每次亮起時突出顯示。 鎖定屏幕上的空間有限,因此確定哪些通知最為緊急或最密切相關非常重要。 由于這個原因,Android 在處理通知時使用了更為精密的排序算法,考慮到以下因素:
-
時間戳以及應用規定的優先級;
-
通知是否最近以聲音或振動形式告知過用戶;
-
與使用 EXTRA_PEOPLE 的通知相關的任何人,尤其是加星標的聯系人;