Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android系統應用---Notification之一:Notification概述及使用

Android系統應用---Notification之一:Notification概述及使用

編輯:關於Android編程

通知機制 是Android和用戶交互,提高APP活躍度的重要手段,可以將一些重要的信息通過通知展示給用戶,比如說新的聊天消息或者日歷事件。Notification的設計理念是既將重要的信息告知用戶又不會打斷用戶當前的行為,如果信息使用戶關注的,用戶會點擊主動去執行相關的操作,對於一個APP來說,通知也不可以濫用,否則冗余的消息通知只會疏遠你的用戶。

通知可以分為ToastNotification和StatusBarNotification,Toast相對簡單,我們主要研究的的是StatusBarNotification

 

Notification的功能作用

1.顯示接收到短信、即時消息等信息 (如QQ、微信、短信)

2.顯示客戶端的推送消息(如有新版本發布,廣告,推薦新聞等)

3.顯示正在進行的事物(後台運行的程序,如音樂播放器、版本更新時候的下載進度等)

Notification的表現形式

一個通知到來之後,一般會閃爍一個5s的ticker,然後狀態欄顯示通知圖標,下拉狀態欄顯示消息通知的完整信息,如下圖,發送通知的同時也可以給notification添加聲音、震動、閃光燈等功能用來提醒用戶。

技術分享

 

當用戶點擊這個notification 時,系統就會根據創建 notification 時傳入的Intent來啟動對應的Activity。當後台服務需要提示用戶來響應某個事件時,也應該使用狀態欄通知。後台服務不應該自己去啟動一個 activity 來與用戶互動,它應該創建一個狀態欄通知,當用戶選擇這個通知時再去啟動 activity.

可以在 Activity或者 Service中初始化一個狀態欄通知,但是由於 activity 只能在它運行在前台並獲取焦點時采取操作,一般我們只是用做測試,所以狀態欄通知通常都是由服務創建的。

 

創建和更新一個Notification

使用 Notification類和 NotificationManager類來創建一個狀態欄通知

NotificationManager類是用來管理所有通知的系統服務,通getSystemService()方法來獲得它的引用。使用Notification實例去配置一個狀態欄通知的屬性,比如圖標、內容、其他的設置)等。然後,通過notify()方法將你的Notification發送出去.

Android3.0之前,直接創建一個Notification

1.獲取 NotificationManager的引用

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

 

2.創建 Notification

Notification notification =new Notification(icon,tickerText,when);

3. 定義通知的內容和PendingIntent:

//實例化Intent

Intent notificationIntent = new Intent(this, MyClass.class);

//獲取PendingIntent

PendingIntent contentIntent =PendingIntent.getActivity(this, 0,notificationIntent, 0);

//設置事件信息

notification.setLatestEventInfo(context,contentTitle, contentText, contentIntent);

4. 把 Notification傳給NotificationManager:

mNotificationManager.notify(id, notification);

3.0之後,為了更好地管理通知,androidSDK引入了Notification的內部類Notification.Builder,一般用於管理Notification,動態的設置Notification的一些屬性,使用set來設置相關屬性,set方法有返回值,返回配置後的builder對象。

NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

Builderbuilder = new NotificationCompat.Builder(MainActivity.this);

PendingIntentcontentIndent =PendingIntent.getActivity(MainActivity.this, 0,new Intent(MainActivity.this,MainActivity.class),PendingIntent.FLAG_UPDATE_CURRENT);

builder .setContentIntent(contentIndent)

.setSmallIcon(R.drawable.ic_launcher)//設置狀態欄顯示的小圖標

.setLargeIcon(BitmapFactory.decodeResource(res,R.drawable.i5))//下拉下拉列表裡面的圖標(大圖標)

.setTicker("this is bitch!") //設置狀態欄的顯示的信息

.setWhen(System.currentTimeMillis())//設置時間發生時間

.setAutoCancel(true)//設置可以清除

.setContentTitle("This is ContentTitle")//設置下拉列表裡的標題

.setContentText("this is ContentText");//設置上下文內容

//獲取添加了各種屬性的新的notification對象

Notificationnotification = builder.build();

//加id是為了顯示多條Notification

notificationManager.notify(id,notification);

★發送通知方法的第一個參數是通知的 ID,第二個參數是要發送的 Notification實例。ID是你程序中通知的身份識別,更新一條通知的時候也是通過這個ID,就不會產生過多的通知了,只要ID相同,就可以更新這條通知。

★PendingIntent和Intent略有不同,它可以設置執行次數,主要用於遠程服務通信、鬧鈴、通知、啟動器、短信中。Notification支持多種Intent來響應單擊事件、消除事件、處理緊急狀態的全屏事件等,用到了setContentIntent(PendingIntentintent)來處理以上事件。

為通知添加聲音,振動和閃光燈

添加聲音

可以給通知設置一個默認的聲音或者在程序中指定一個聲音.

默認聲音:notification.defaults |=Notification.DEFAULT_SOUND;

自定義通知聲音:

//獲取默認鈴聲

.setDefaults(Notification.DEFAULT_SOUND)

//獲取自定義鈴聲

.setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))

//獲取Android多媒體庫內的鈴聲

.setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI,"5"))

★如果 defaults 屬性中有 DEFAULT_SOUND,那麼默認的聲音將會覆蓋自定義設置的聲音。

添加震動

可以通過默認的震動提示用戶,或者在應用中自定義一種震動形式.

使用默認震動:

notification.defaults |= Notification.DEFAULT_VIBRATE;

要實現自定義的震動,將一個 long 型數組傳給 vibrate 屬性:

long[] vibrate ={0,100,200,300};//延時0ms,震動100ms,延時200ms,震動300ms

builder.setVibrate(vibrate);

★如果 defaults 屬性中包含了 DEFAULT_VIBRATE值,那麼默認的震動形式將會覆蓋自定義的震動

添加閃光燈

可以使用默認的閃光燈,也可以在程序中自定義閃光燈的顏色和形式.

使用默認的閃光燈:

notification.defaults |= Notification.DEFAULT_LIGHTS;

自定義閃光燈:

需要設置如下屬性ledARGB表示顏色,ledOffMS表示燈滅的時間,ledOnMS表示燈亮的時間

Builder.setLights(int argb,int onMs, int offMs)

★只有在設置了標志符Flags為Notification.FLAG_SHOW_LIGHTS的時候,才支持三色燈提醒。

★顏色跟設備有關,不是所有的顏色都可以,要看具體設備。

Notification常用的其它標識flag和屬性字段和方法

●FLAG_AUTO_CANCEL :用戶點擊通知後,通知就會自動取消掉.

●FLAG_INSISTENT:通知音頻將會不斷重復播放,直到用戶對這個通知作出響應.

●FLAG_ONLY_ALERT_ONCE:發起Notification後,鈴聲和震動均只執行一次

●FLAG_ONGOING_EVENT:歸類到“正在運行”下

●FLAG_NO_CLEAR:清除通知是不會清除該通知

●FLAG_FOREGROUND_SERVICE:表示正在運行的服務

使用方法:在實例化通知欄後天使用flags添加對應的屬性值,多個屬性之間用或表示

Notification notification = mBuilder.build();

notification.flags= Notification.FLAG_AUTO_CANCEL;

●number記錄多條通知的個數

●setDefaults(int defaults)

向通知添加聲音、閃燈和振動效果的最簡單、使用默認(defaults)屬性,可以組合多個屬性對應屬性:

Notification.DEFAULT_VIBRATE //添加默認震動提醒

Notification.DEFAULT_SOUND //添加默認聲音提醒

Notification.DEFAULT_LIGHTS//添加默認三色燈提醒

Notification.DEFAULT_ALL//添加默認以上3種全部提醒

 

 

●.setPriority(int pri)

 

功能:設置優先級

對應優先級描述如下圖:

 

優先級

用戶

MAX

重要而緊急的通知,通知用戶這個事件是時間上緊迫的或者需要立即處理的。

HIGH

高優先級用於重要的通信內容,例如短消息或者聊天,這些都是對用戶來說比較有興趣的。

DEFAULT

默認優先級用於沒有特殊優先級分類的通知。

LOW

低優先級可以通知用戶但又不是很緊急的事件。

MIN

用於後台消息 (例如天氣或者位置信息)。最低優先級通知將只在狀態欄顯示圖標,只有用戶下拉通知抽屜才能看到內容。

\

 

 

●setOngoing(booleanongoing)

功能:設置為ture,表示它為一個正在進行的通知。他們通常是用來表示一個後台任務,不可刪除

自定義通知的布局

當有需求在通知中顯示非默認的內容的時候,可以使用 RemoteViews來自定義通知的顯示內容

Notification的自定義布局是RemoteViews,和其他RemoteViews一樣,在自定義視圖布局文件中,僅支持FrameLayout、LinearLayout、RelativeLayout三種布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper這些顯示控件,不支持這些類的子類或Android提供的其他控件,否則會引起ClassNotFoundException異常

 

步驟如下:

1)創建自定義視圖

2)獲取遠程視圖對象

RemoteViews contentView = newRemoteViews(getPackageName(),R.layout.custom_notification_layout);

contentView.setImageViewResource(R.id.image,R.drawable.notification_image);

contentView.setTextViewText(R.id.title,"Customnotification");

contentView.setTextViewText(R.id.text,"This is acustom layout");

//將 RemoveViews 對象傳給通知的 contentView 屬性

mBuilder.setContent(mRemoteViews)

3)設置PendingIntent(來響應各種事件)

mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_prev,intent_prev);

4)發起Notification

mNotificationManager.notify(notifyId, notify);

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved