Android 通知欄Notification全面學習 - 程式人生
文章推薦指數: 80 %
下面就來說說經常會使用到通知機制中的通知欄框架(Notificaiton),它適用於互動事件的通知。
它是位於頂層可以展開的通知列表。
程式人生>>Android通知欄Notification全面學習
Android通知欄Notification全面學習
阿新••發佈:2019-02-08
在android的應用層中,涉及到很多應用框架,例如:Service框架,Activity管理機制,Broadcast機制,對話方塊框架,標題欄框架,狀態列框架,通知機制,ActionBar框架等等。
下面就來說說經常會使用到通知機制中的通知欄框架(Notificaiton),它適用於互動事件的通知。
它是位於頂層可以展開的通知列表。
它會時不時的提醒你什麼軟體該更新了,什麼人發你微信訊息了等。
(網上看了下,全面介紹的文章不多,所以就萌生了寫這篇的念頭,隨便當作回顧筆記。
下面我就通過官方文件、原始碼、書上的一些資料彙總下這一塊的知識,並通過一個通知欄的彙總DEMO讓大家更好的瞭解這個類的使用,內容有點多,可以根據需求看目錄學習)。
Notificaiton狀態通知欄:
功能作用
1.顯示接收到短訊息、即使訊息等資訊(如QQ、微信、新浪、簡訊)
2.顯示客戶端的推送訊息(如有新版本釋出,廣告,推薦新聞等)
3.顯示正在進行的事物(例如:後臺執行的程式)(如音樂播放器、版本更新時候的下載進度等)
思維導圖結構
思維導圖的大體結構(按照各個節點延伸拓展學習)
Notificaiton--service -- BroadcastReceiver --Intent(flag、Action等屬性應用)-- PendingIntent
感慨:
一個Notificaiton通知的拓展使用就要涉及與4大組建的配合,所以學好整體的知識體系。
聯絡:
1.由於service是在後臺執行,所以它意圖做什麼我們看不到,可以通過Notificaiton來顯示提醒(如音樂的後臺播放)。
2.service服務和BroadcastReceiver廣播相結合,在加上Notificaiton 顯示(如程式的後臺更新)。
3.Intent作為意圖處理,和Notificaiton的點選時間緊密結合在了一起,並且與BroadcastReceiver和service的聯絡也緊密不可以分割。
(service在後臺之後通過BroadcastReceiver來通知Notificaiton 顯示相關東西,在通過Intent完成使用者的意圖操作)
對應的官方連結
設計文件: .
開發文件:http://developer.android.com/reference/android/app/Notification.html
大體瞭解
Notification支援文字內容顯示、震動、三色燈、鈴聲等多種提示形式,在預設情況下,Notification僅顯示訊息標題、訊息內容、送達時間這3項內容。
以下就是通知的基本佈局。
通知的基本佈局:
普通檢視:
高度64dp
大試圖的通知在展開前也顯示為普通檢視
元素:
1. 標題 Title/Name
2. 大圖示 Icon/Photo
3. 內容文字
4. 內容資訊 MESSAGE
5. 小圖示SecondaryIcon
6. 通知的時間Timestamp,預設為系統發出通知的時間,也可通過setWhen()來設定
相關分析
狀態通知欄主要涉及到2個類: Notification和 NotificationManager
Notification為通知資訊類,它裡面對應了通知欄的各個屬性
NotificationManager : 是狀態列通知的管理類,負責發通知、清除通知等操作。
注意:NotificationManager是一個系統Service,所以必須通過 getSystemService(NOTIFICATION_SERVICE)方法來獲取,方法如下。
NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
使用步驟:
流程模組:
第一步:
建立一個通知欄的Builder構造類 (CreateaNotificationBuilder)
第二步:
定義通知欄的Action (DefinetheNotification'sAction)
第三步:
設定通知欄點選事件 (SettheNotification'sClickBehavior)
第四步:
通知 (IssuetheNotification)
程式碼模組:
實現系統預設的通知欄效果:
第一步:獲取狀態通知欄管理:
NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
第二步:例項化通知欄構造器NotificationCompat.Builder:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
第三步:對Builder進行配置:
mBuilder.setContentTitle("測試標題")//設定通知欄標題
.setContentText("測試內容") //設定通知欄顯示內容
.setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) //設定通知欄點選意圖
// .setNumber(number) //設定通知集合的數量
.setTicker("測試通知來啦") //通知首次出現在通知欄,帶上升動畫效果的
.setWhen(System.currentTimeMillis())//通知產生的時間,會在通知資訊裡顯示,一般是系統獲取到的時間
.setPriority(Notification.PRIORITY_DEFAULT) //設定該通知優先順序
// .setAutoCancel(true)//設定這個標誌當用戶單擊面板就可以讓通知將自動取消
.setOngoing(false)//ture,設定他為一個正在進行的通知。
他們通常是用來表示一個後臺任務,使用者積極參與(如播放音樂)或以某種方式正在等待,因此佔用裝置(如一個檔案下載,同步操作,主動網路連線)
.setDefaults(Notification.DEFAULT_VIBRATE)//向通知新增聲音、閃燈和振動效果的最簡單、最一致的方式是使用當前的使用者預設設定,使用defaults屬性,可以組合
//Notification.DEFAULT_ALL Notification.DEFAULT_SOUND 新增聲音 // requires VIBRATE permission
.setSmallIcon(R.drawable.ic_launcher);//設定通知小ICON
對應的各個方法的屬性(部分方法以上程式碼中已經作註釋,就不再介紹):
(1)方法:設定提醒標誌符Flags
功能:提醒標誌符,向通知新增聲音、閃燈和振動效果等設定達到通知提醒效果,可以組合多個屬性
有2種設定方法:
1.例項化通知欄之後通過給他新增.flags屬性賦值。
Notification notification = mBuilder.build();
notification.flags = Notification.FLAG_AUTO_CANCEL;
2.通過setContentIntent( intent)方法中的意圖設定對應的flags
public PendingIntent getDefalutIntent(int flags){
PendingIntent pendingIntent= PendingIntent.getActivity(this, 1, new Intent(), flags);
return pendingIntent;
}
提醒標誌符成員:
Notification.FLAG_SHOW_LIGHTS //三色燈提醒,在使用三色燈提醒時候必須加該標誌符
Notification.FLAG_ONGOING_EVENT //發起正在執行事件(活動中)
Notification.FLAG_INSISTENT //讓聲音、振動無限迴圈,直到使用者響應 (取消或者開啟)
Notification.FLAG_ONLY_ALERT_ONCE //發起Notification後,鈴聲和震動均只執行一次
Notification.FLAG_AUTO_CANCEL //使用者單擊通知後自動消失
Notification.FLAG_NO_CLEAR //只有全部清除時,Notification才會清除 ,不清楚該通知(QQ的通知無法清除,就是用的這個)
Notification.FLAG_FOREGROUND_SERVICE //表示正在執行的服務
(2)方法:.setDefaults(intdefaults) (NotificationCompat.Builder中的方法,用於提示)
功能:向通知新增聲音、閃燈和振動效果的最簡單、使用預設(defaults)屬性,可以組合多個屬性(和方法1中提示效果一樣的)
對應屬性:
Notification.DEFAULT_VIBRATE //新增預設震動提醒 需要VIBRATEpermission
Notification.DEFAULT_SOUND // 新增預設聲音提醒
Notification.DEFAULT_LIGHTS// 新增預設三色燈提醒
Notification.DEFAULT_ALL// 新增預設以上3種全部提醒
(3)方法:setVibrate(long[]pattern)
功能:設定震動方式。
使用:
.setVibrate(newlong[] {0,300,500,700});
實現效果:延遲0ms,然後振動300ms,在延遲500ms,接著在振動700ms。
以上方法的還有種寫法是
mBuilder.build().vibrate = newlong[] {0,300,500,700};
以此類推,2種寫法都可以。
如果希望設定預設振動方式,設定了方法(2)中預設為DEFAULT_VIBRATE即可。
(4)方法:.setLights(intledARGB ,intledOnMS ,intledOffMS )
功能:android支援三色燈提醒,這個方法就是設定不同場景下的不同顏色的燈。
描述:其中ledARGB表示燈光顏色、 ledOnMS亮持續時間、ledOffMS暗的時間。
注意:1)只有在設定了標誌符Flags為Notification.FLAG_SHOW_LIGHTS的時候,才支援三色燈提醒。
2)這邊的顏色跟裝置有關,不是所有的顏色都可以,要看具體裝置。
使用:
.setLights(0xff0000ff, 300, 0)
同理,以下方法也可以設定同樣效果:
Notification notify = mBuilder.build();
notify.flags = Notification.FLAG_SHOW_LIGHTS;
notify.ledARGB = 0xff0000ff;
notify.ledOnMS = 300;
notify.ledOffMS = 300;
如果希望使用預設的三色燈提醒,設定了方法(2)中預設為DEFAULT_LIGHTS即可。
(5)方法:.setSound( sound)
功能:設定預設或則自定義的鈴聲,來提醒。
//獲取預設鈴聲
.setDefaults(Notification.DEFAULT_SOUND)
//獲取自定義鈴聲
.setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))
//獲取Android多媒體庫內的鈴聲
.setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "5"))
同理相同效果的另一種設定方法這邊就不講,和上面的都是一樣的。
(6)方法:.setPriority(intpri)
功能:設定優先順序
對應優先順序描述如下圖:
優先順序
使用者
MAX
重要而緊急的通知,通知使用者這個事件是時間上緊迫的或者需要立即處理的。
HIGH
高優先順序用於重要的通訊內容,例如短訊息或者聊天,這些都是對使用者來說比較有興趣的。
DEFAULT
預設優先順序用於沒有特殊優先順序分類的通知。
LOW
低優先順序可以通知使用者但又不是很緊急的事件。
MIN
用於後臺訊息(例如天氣或者位置資訊)。
最低優先順序通知將只在狀態列顯示圖示,只有使用者下拉通知抽屜才能看到內容。
對應屬性(作用看上圖就可知道):
Notification.PRIORITY_DEFAULT
Notification.PRIORITY_HIGH
Notification.PRIORITY_LOW
Notification.PRIORITY_MAX
Notification.PRIORITY_MIN
(7)方法:setOngoing(booleanongoing)
功能:設定為ture,表示它為一個正在進行的通知。
他們通常是用來表示一個後臺任務,使用者積極參與(如播放音樂)或以某種方式正在等待,因此佔用裝置(如一個檔案下載,同步操作,主動網路連線)
(8)方法:setProgress(intmax,intprogress,booleanindeterminate)
屬性:max:進度條最大數值 、progress:當前進度、indeterminate:表示進度是否不確定,true為不確定,如下第3幅圖所示 ,false為確定下第1幅圖所示
功能:設定帶進度條的通知,可以在下載中使用
效果圖如下:
注意:此方法在4.0及以後版本才有用,如果為早期版本:需要自定義通知佈局,其中包含ProgressBar檢視
使用:如果為確定的進度條:呼叫來設定通知,在更新進度的時候在此發起通知更新progress,並且在下載完成後要移除進度條,通過呼叫setProgress(0,
0,false)既可。
如果為不確定(持續活動)的進度條,這是在處理進度無法準確獲知時顯示活動正在持續,所以呼叫setProgress(0,
0,true) ,操作結束時,呼叫
ftp客戶端實現(1)--FTP格式
«上一篇
python實現合併兩個有序列表下一篇»
相關推薦
Android通知欄Notification全面學習
在android的應用層中,涉及到很多應用框架,例如:Service框架,Activity管理機制,Broadcast...
Android通知欄Notification的整合全面學習(一個DEMO讓你完全瞭解它)
在android的應用層中,涉及到很多應用框架,例如:Service框架,Activity管理機制,Broadcast機制,...
Android通知欄(Notification)點選跳轉頁面
1,通知欄應用:
Notification,是一種具有全域性效果的通知,可以在系統的通知欄中顯示。
當APP向系統發出通知時,它將先以圖示的形式...
Android通知欄Notification懸浮通知欄
NotificationManagermNotificationManager=(NotificationManager)context.ge...
Android通知欄(Notification)介紹及使用
在使用手機時,我們常常會碰到各種通知,例如微信,頭條,UC等,天天不厭其煩的給你各種推送,當然了我們今天不講推送...
Android通知欄Notification基本使用
在Android作業系統中,狀態列通知Notification的運用是很常見的,比如我們收到簡訊,QQ訊息等,在手機頂端通...
Android自定義通知欄Notification字型適配問題
前言
專案之前自定義的通知欄是一直有一個問題,就是不同的手機廠商生產的手機狀態列的背景顏色是不同的,所以自定義...
android通知欄NotificationManager及自定義通知欄Notification的使用
在Android作業系統中,狀態列通知Notification的運用是很常見的,比如我們收到簡訊,QQ訊息等,在...
android通知欄的訊息通知(Notification)
轉載請註明出處:
在開發中經常會用到推送給使用者通知、訊息等的情況,今天就跟大家一起來學習推送訊息時通...
通知欄Notification的整理
異步onclick新的sumlocaletldappacklag一、介紹
通知欄適用於交...
搜尋
基礎教學
Mysql入門
Sql入門
Android入門
Docker入門
Go語言入門
Ruby程式入門
Python入門
Python進階
Django入門
Python爬蟲入門
最近訪問
Android+通知欄Notification全面學習
python報錯:TypeError:+slice+indices+must+be+integers+or+None+or+have+an+__index__+method
IPv6來啦+(by+quqi99)
軟件工程課後作業3:如何返回一個整數數組中最大子數組的和
TIMESAT3.1(3.2)執行及除錯例項
[Android]ScrollView和ListView上方的headView的下拉放大效果-PullZoomView的使用篇
定時器和多執行緒
Xcode簡明教程(使用Xcode編寫C語言程式)
python庫安裝如:requests,selenium等
【資料結構】雙向連結串列的實現
延伸文章資訊
- 1创建展开式通知| Android 开发者
基本通知通常包括标题、一行文本,以及用户可以执行的一项或多项响应操作。如需提供更多信息,您还可以应用本页介绍的多个通知模板之一来创建大型展开 ...
- 2Android Koltin 實作Day 15:Notification ... - iT 邦幫忙
從API 26 開始,Android 多了通知頻道(Notification channels)的功能, ... 彈出提醒、音效及震動),不顯示在狀態欄,僅顯示在展開的通知欄中。
- 3Android通知Notification使用全解析,看这篇就够了
通知是Android 在您的应用UI 之外显示的消息,用于向用户提供提醒、来自 ... 用户可以向下拖动抽屉中的通知以显示展开的视图,该视图显示其他内容和 ...
- 4步驟5 – 傳播通知| Adobe Campaign
Launch Android Studio; 開啟ACSPushTutorial 專案; 展開專案結構; 以滑鼠右鍵按一下套件資料夾(com.example.acspushtutorial)和N...
- 5Android 如何顯示通知訊息(Notifications)? - MagicLen
通知是開發Android App很重要的一環,尤其是在Android 5.0之後更為重要。 ... 要的,當Style並未被Android展開(Expend)時(通常只有最上方的通知會被 ...