天天看點

Android 通知之 Notification

android 通知之 notification

notifications | android developers

http://developer.android.com/guide/topics/ui/notifiers/notifications.html#notificationresponse

小圖示,使用setsamllicon()方法設定。

标題,使用setcontenttitle()方法設定。

文本内容,使用setcontenttext()方法設定。

pendingintent提供了多個靜态的getxxx()方法,用于獲得适用于不同場景的pendingintent對象。一般需要傳遞的幾個參數都很正常,隻介紹一個flag參數,用于辨別pendingintent的構造選擇:

flag_cancel_current:如果建構的pendingintent已經存在,則取消前一個,重新建構一個。

flag_no_create:如果前一個pendingintent已經不存在了,将不再建構它。

flag_one_shot:表明這裡建構的pendingintent隻能使用一次。

flag_update_current:如果建構的pendingintent已經存在,則替換它,常用。

notification視覺風格

  notification有兩種視覺風格,一種是标準視圖(normal view)、一種是大視圖(big view)。标準視圖在android中各版本是通用的,但是對于大視圖而言,僅支援android4.1+的版本。

從官方文檔了解到,一個标準視圖顯示的大小要保持在64dp高,寬度為螢幕标準。

标準視圖的通知主體内容有一下幾個:

1.通知标題。

2.大圖示。

3.通知内容。

4.通知消息。

5.小圖示。

6.通知的時間,一般為系統時間,也可以使用setwhen()設定。

而對于大視圖(big view)而言,它的細節區域隻能顯示256dp高度的内容,并且隻對android4.1+之後的裝置才支援,它比标準視圖不一樣的地方,均需要使用setstyle()方法設定

setstyle()傳遞一個notificationcompat.style對象,它是一個抽象類,android為我們提供了三個實作類,用于顯示不同的場景。分别是:

notificationcompat.bigpicturestyle, 在細節部分顯示一個256dp高度的位圖。

notificationcompat.bigtextstyle,在細節部分顯示一個大的文本塊。

notificationcompat.inboxstyle,在細節部分顯示一段行文本。

notification.builder類中提供一個setprogress(int max,int progress,boolean indeterminate)方法用于設定進度條,max用于設定進度的最大數,progress用于設定目前的進度,indeterminate用于設定是否是一個确定進度的進度條。通過indeterminate的設定,可以實作兩種不同樣式的進度條,一種是有進度刻度的(true),一種是循環流動的(false)。

一種是有進度刻度的(false),一種是循環流動的(true)

builder.setprogress(0, 0, true);//設定為true,表示流動

builder.setprogress(100, 100, false);//設定為false,表示刻度

remoteviews contentviews = new remoteviews(getpackagename(),

r.layout.custom_notification);

contentviews.setimageviewresource(r.id.imageno, r.drawable.btm1);

contentviews.settexviewtext(r.id.titleno, "xxx");

contentviews.settexviewtext(r.id.textno, "xxx");

notificationcompat.builder.setcontent(remoteviews)

設定提示響應

對于有些通知,需要調用一些裝置的資源,使使用者能更快的發現有新通知,一般可設定的響應有:鈴聲、閃光燈、震動。對于這三個屬性,notificationcompat.builder提供了三個方法設定:

可設定的響應有:鈴聲、閃光燈、震動

setsound(uri sound):設定一個鈴聲,用于在通知的時候響應。傳遞一個uri的參數,格式為“file:///mnt/sdcard/xxx.mp3”。

setlights(int argb, int onms, int offms):設定前置led燈的閃爍速率,持續毫秒數,停頓毫秒數。

setvibrate(long[] pattern):設定震動的模式,以一個long數組儲存毫秒級間隔的震動。

  大多數時候,我們并不需要設定一個特定的響應效果,隻需要遵照使用者裝置上系統通知的效果即可,那麼可以使用setdefaults(int)方法設定預設響應參數,在notification中,對它的參數使用常量定義了,我們隻需使用即可:

default_all:鈴聲、閃光、震動均系統預設。

default_sound:系統預設鈴聲。

default_vibrate:系統預設震動。

default_lights:系統預設閃光。

  而在android中,如果需要通路硬體裝置的話,是需要對其進行授權的,是以需要在清單檔案androidmanifest.xml中增加兩個授權,分别授予通路振動器與閃光燈的權限:

1 <!-- 閃光燈權限 -->

2 <uses-permission android:name="android.permission.flashlight"/>

3 <!-- 振動器權限 -->

4 <uses-permission android:name="android.permission.vibrate"/>