1. 程式人生 > >Android 通知欄Notification全面學習

Android 通知欄Notification全面學習

在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. 小圖示 Secondary Icon

6. 通知的時間 Timestamp,預設為系統發出通知的時間,也可通過setWhen()來設定



相關分析

狀態通知欄主要涉及到2個類:  Notification 和 NotificationManager 

Notification為通知資訊類,它裡面對應了通知欄的各個屬性

NotificationManager :  是狀態列通知的管理類,負責發通知、清除通知等操作。

注意:NotificationManager 是一個系統Service,所以必須通過 getSystemService(NOTIFICATION_SERVICE)方法來獲取,方法如下。

  1. NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);  

使用步驟:

流程模組:

第一步:

建立一個通知欄的Builder構造類  (Create a Notification Builder)

第二步:

定義通知欄的Action  (Define the Notification's Action)

第三步:

設定通知欄點選事件    (Set the Notification's Click Behavior)

第四步:

通知   (Issue the Notification)

程式碼模組:

實現系統預設的通知欄效果:

第一步:獲取狀態通知欄管理:

  1. NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);  

第二步:例項化通知欄構造器NotificationCompat.Builder:

  1. NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);  

第三步:對Builder進行配置:

  1. mBuilder.setContentTitle("測試標題")//設定通知欄標題
  2.     .setContentText("測試內容") /<span style="font-family: Arial;">/設定通知欄顯示內容</span>  
  3.     .setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) //設定通知欄點選意圖
  4. //  .setNumber(number) //設定通知集合的數量
  5.     .setTicker("測試通知來啦"//通知首次出現在通知欄,帶上升動畫效果的
  6.     .setWhen(System.currentTimeMillis())//通知產生的時間,會在通知資訊裡顯示,一般是系統獲取到的時間
  7.     .setPriority(Notification.PRIORITY_DEFAULT) //設定該通知優先順序
  8. //  .setAutoCancel(true)//設定這個標誌當用戶單擊面板就可以讓通知將自動取消  
  9.     .setOngoing(false)//ture,設定他為一個正在進行的通知。他們通常是用來表示一個後臺任務,使用者積極參與(如播放音樂)或以某種方式正在等待,因此佔用裝置(如一個檔案下載,同步操作,主動網路連線)
  10.     .setDefaults(Notification.DEFAULT_VIBRATE)//向通知新增聲音、閃燈和振動效果的最簡單、最一致的方式是使用當前的使用者預設設定,使用defaults屬性,可以組合
  11.     //Notification.DEFAULT_ALL  Notification.DEFAULT_SOUND 新增聲音 // requires VIBRATE permission
  12.     .setSmallIcon(R.drawable.ic_launcher);//設定通知小ICON

對應的各個方法的屬性(部分方法以上程式碼中已經作註釋,就不再介紹):

(1)方法:設定提醒標誌符Flags

功能:提醒標誌符,向通知新增聲音、閃燈和振動效果等設定達到通知提醒效果,可以組合多個屬性

有2種設定方法:

1.例項化通知欄之後通過給他新增.flags屬性賦值。

  1. Notification notification = mBuilder.build();  
  2. notification.flags = Notification.FLAG_AUTO_CANCEL;  
2.通過setContentIntent(PendingIntent intent)方法中的意圖設定對應的flags
  1. public PendingIntent getDefalutIntent(int flags){  
  2.     PendingIntent pendingIntent= PendingIntent.getActivity(this1new Intent(), flags);  
  3.     return pendingIntent;  
  4. }  
提醒標誌符成員:

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(int defaults)     (NotificationCompat.Builder中的方法,用於提示)

功能:向通知新增聲音、閃燈和振動效果的最簡單、使用預設(defaults)屬性,可以組合多個屬性(和方法1中提示效果一樣的)

對應屬性:

Notification.DEFAULT_VIBRATE    //新增預設震動提醒  需要 VIBRATE permission

Notification.DEFAULT_SOUND    // 新增預設聲音提醒

Notification.DEFAULT_LIGHTS// 新增預設三色燈提醒

Notification.DEFAULT_ALL// 新增預設以上3種全部提醒

(3)方法:setVibrate(long[] pattern)

功能:設定震動方式。

使用:

  1. .setVibrate(newlong[] {0,300,500,700});  
實現效果:延遲0ms,然後振動300ms,在延遲500ms,接著在振動700ms。

以上方法的還有種寫法是

  1. 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)這邊的顏色跟裝置有關,不是所有的顏色都可以,要看具體裝置。

使用:

  1. .setLights(0xff0000ff3000)  
同理,以下方法也可以設定同樣效果:
  1. Notification notify = mBuilder.build();  
  2. notify.flags = Notification.FLAG_SHOW_LIGHTS;  
  3. notify.ledARGB = 0xff0000ff;  
  4. notify.ledOnMS = 300;  
  5. notify.ledOffMS = 300;  
如果希望使用預設的三色燈提醒,設定了方法(2)中預設為DEFAULT_LIGHTS即可。

(5)方法:.setSound(Uri sound)


功能:設定預設或則自定義的鈴聲,來提醒。

  1. //獲取預設鈴聲
  2. .setDefaults(Notification.DEFAULT_SOUND)  
  3. //獲取自定義鈴聲
  4. .setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))  
  5. //獲取Android多媒體庫內的鈴聲
  6. .setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "5"))  

同理相同效果的另一種設定方法這邊就不講, 和上面的都是一樣的。

(6)方法:.setPriority(int pri)

功能:設定優先順序

對應優先順序描述如下圖:

優先順序 使用者
MAX 重要而緊急的通知,通知使用者這個事件是時間上緊迫的或者需要立即處理的。
HIGH 高優先順序用於重要的通訊內容,例如短訊息或者聊天,這些都是對使用者來說比較有興趣的。
DEFAULT 預設優先順序用於沒有特殊優先順序分類的通知。
LOW 低優先順序可以通知使用者但又不是很緊急的事件。
MIN 用於後臺訊息 (例如天氣或者位置資訊)。最低優先順序通知將只在狀態列顯示圖示,只有使用者下拉通知抽屜才能看到內容。

對應屬性(作用看上圖就可知道):

Notification.PRIORITY_DEFAULT

Notification.PRIORITY_HIGH

Notification.PRIORITY_LOW

Notification.PRIORITY_MAX

Notification.PRIORITY_MIN

(7)方法:setOngoing(boolean ongoing)

功能:設定為ture,表示它為一個正在進行的通知。他們通常是用來表示一個後臺任務,使用者積極參與(如播放音樂)或以某種方式正在等待,因此佔用裝置(如一個檔案下載,同步操作,主動網路連線)

(8)方法:setProgress(int max, int progress,boolean indeterminate)

屬性:max:進度條最大數值  、progress:當前進度、indeterminate:表示進度是否不確定,true為不確定,如下第3幅圖所示  ,false為確定下第1幅圖所示

功能:設定帶進度條的通知,可以在下載中使用

效果圖如下:

       

注意:此方法在4.0及以後版本才有用,如果為早期版本:需要自定義通知佈局,其中包含ProgressBar檢視

使用:如果為確定的進度條:呼叫來設定通知,在更新進度的時候在此發起通知更新progress,並且在下載完成後要移除進度條,通過呼叫setProgress(0, 0, false)既可。

如果為不確定(持續活動)的進度條,這是在處理進度無法準確獲知時顯示活動正在持續,所以呼叫setProgress(0, 0, true) ,操作結束時,呼叫

相關推薦

Android 通知欄Notification全面學習

在android的應用層中,涉及到很多應用框架,例如:Service框架,Activity管理機制,Broadcast機制,對話方塊框架,標題欄框架,狀態列框架,通知機制,ActionBar框架等等。 下面就來說說經常會使用到通知機制中的通知欄框架(Notifi

Android 通知欄Notification的整合 全面學習 (一個DEMO讓你完全瞭解它)

在android的應用層中,涉及到很多應用框架,例如:Service框架,Activity管理機制,Broadcast機制,對話方塊框架,標題欄框架,狀態列框架,通知機制,ActionBar框架等等。 下面就來說說經常會使用到通知機制中的通知欄框架(Notificaiton

Android 通知欄Notification 懸浮通知欄

NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification.Builder

Android通知欄(Notification)介紹及使用

在使用手機時,我們常常會碰到各種通知,例如微信,頭條,UC等,天天不厭其煩的給你各種推送,當然了我們今天不講推送,我們講講通知欄的構建和使用,以及自定義通知欄的佈局和使用方法 構建一個通知欄一般分為這幾個步驟: 1.建立通知欄管理工具 2.構建通知欄構造器

Android 通知欄 Notification 基本使用

在Android作業系統中,狀態列通知Notification的運用是很常見的,比如我們收到簡訊,QQ訊息等,在手機頂端通知欄就會顯示一條圖文訊息來提示我們。Notification有很多的用法,比如最基本的即時訊息的提示,更新應用或下載檔案的進度條式的提示,用來顯示長文

Android自定義通知欄Notification字型適配問題

前言 專案之前自定義的通知欄是一直有一個問題,就是不同的手機廠商生產的手機狀態列的背景顏色是不同的,所以自定義佈局的字型顏色就會出現衝突,看了幾種適配方案都不是特別完美,把官方文件看了個遍,最後在前輩的總結下新增自己的方案終於得到了一個比較完美的解決方案。文章

Android 通知欄Notification)點選跳轉頁面

1,通知欄應用: Notification,是一種具有全域性效果的通知,可以在系統的通知欄中顯示。當 APP 向系統發出通知時,它將先以圖示的形式顯示在通知欄中。使用者可以下拉通知欄檢視通知的詳細資訊。通知欄和抽屜式通知欄均是由系統控制,使用者可以隨時檢視。  2,程式碼: 【

android 通知欄NotificationManager及自定義通知欄Notification的使用

在Android作業系統中,狀態列通知Notification的運用是很常見的,比如我們收到簡訊,QQ訊息等,在手機頂端通知欄就會顯示一條圖文訊息來提示我們。Notification有很多的用法,比如最基本的即時訊息的提示,更新應用或下載檔案的進度條式的提示,用

android通知欄的訊息通知(Notification)

轉載請註明出處: 在開發中經常會用到推送給使用者通知、訊息等的情況,今天就跟大家一起來學習推送訊息時通知欄的通知Notification。 通知欄訊息通知的使用步驟 一般可以分為以下步驟: 1. 首先需要一個NotificationManag

Android JNI和NDK學習(09)--JNI實例二 傳遞類對象

get state 回調 obj utf 說明 called [] code 1 應用層代碼 NdkParam.java是JNI函數的調用類,它的代碼如下: package com.skywang.ndk; import android.app.Activity;

Android開發系列之學習路線圖

權限 原生開發 edi post 設計 多少 方法 b2c art 通過前面的3篇博客已經簡單的介紹了Android開發的過程並寫了一個簡單的demo,了解了Android開發的環境以及一些背景知識。接下來這篇博客不打算繼續學習Android開發的細節,先停一下,明白一下

Android APK安裝過程學習筆記

屏蔽 組成 學習 二進制 替換 壓縮包 基於 壓縮 方式 1.什麽是APK   APK,即Android Package,Android安裝包。不同平臺的安裝文件格式都不同,類似於Windows的安裝包是二進制的exe格式,Mac的安裝包是dmg格式。APK可以再Andro

通知欄Notification的整理

異步 onclick 新的 sum local etl dap pack lag 一、介紹   通知欄適用於交互事件的通知,是位於頂層可以展開的通知列表。 二、功能作用   1.顯示接收到短消息,及時消息等信息(如QQ、微信、新浪、短信) 2.顯示

Android 四大組件學習之ContentProvider二

gravity over mod cti parse rec 自己的 fontsize activit 上節學習了什麽是ContentProvider。以及ContentProvider的作用。以及什麽是URL。本節就對上節學習的知識做一個實踐,也就是定義自己的Co

android開發藝術探索學習 之 結合Activity的生命周期了解Activity的LaunchMode

友情 dsm ask resume () new onstop androi sum 轉載請標明出處: http://blog.csdn.net/lxk_1993/article/details/50749728 本文出自:【lxk_1993的博客】;

Android 四大組件學習之Service六

div view 代理 執行 article 連接 我想 ces rac 上幾節。我們學習怎樣用StartServer啟動一個服務,用bindServer去綁定一個服務。以及服務的生命周期,以及什麽是IntentService。 也許有讀者會發現,我們BindSe

Android異步載入學習筆記之四:利用緩存優化網絡載入圖片及ListView載入優化

角度 thread 下午 出發 easy code cat height back 假設不做不論什麽處理。直接用網絡載入圖片在網速快的情況下可能沒什麽不好的感覺。可是假設使用移動流量或是網絡不好的時候。問題就來了,要麽用戶會抱怨流量使用太多。要麽抱怨圖

Android基礎部分再學習---activity的狀態保存

imp position 數據 -h 解決 tom import eva line 主要是bundle 這個參數 參考地址:http://blog.csdn.net/lonelyroamer/article/details/18715975 學習Ac

Android Camera2 拍照入門學習

epic 控制 save push ini 步驟 ID 系統 uil 原文:Android Camera2 拍照入門學習 學習資料: 腎虛將軍android ca

20172327 2017-2018-2 《第一行代碼Android》第一章學習總結

rst 私有 variables book overload 應用層 img 工具合集 訪問 學號 2017-2018-2 《第一行代碼Android》第一章學習總結 教材學習內容總結 - Android系統架構: 1.Linux內核層 Android系統是基於Linux內