Android筆記--Notification

一、什麼是Notification?

    Android的通知用來提示用戶的某個非緊急事件的發生,會在statusBar上面做出一些圖片、文字的提示,打開通知欄之後能看到更多的信息,甚至是通過點擊進入一個應用,比如我們常見的短信、Email、Wifi通知等都是Notification案例。

二、Notification分類

1、普通Notification

如下圖所示,就是一個普通的Notification,是我們最常用的,主要由內容標題、大圖標、內容、內容附加信息、小圖標、時間等組成。


2、大布局Notification

    這是android4.1以後才增加的,與普通Notification的區別主要就是其顯示內容可以擴展,並且只有在所有的Notification的最上面時纔會顯示大布局,其他情況下顯示小布局,也可以用手指將其擴展爲大布局。

大布局也可分爲三種類型:

InboxStyle收件箱風格:顯示多行文字

BigTextStyle大文字風格:顯示一個大的文字塊

BigPictureStyle大圖片風格:詳情區域包含一個256dp高度的位圖

 

3、自定義佈局Notification

像我們常見的音樂播放器控制的Notification就是自定義佈局Notification,這個後續單獨介紹。

三、Notification的創建步驟

1、獲得系統級的服務NotificationManager。調用Context.getSystemService(NOTIFICATION_SERVICE)方法即可返回NotificationManager實例,例如

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

2、  實例化Notification,並設置其屬性,例如

  Notification notification = new Notification();
         notification.icon = R.drawable.ic_launcher;
        notification.tickerText= "Hello,I am coming";
        notification.when =System.currentTimeMillis();
        notification.defaults= Notification.DEFAULT_SOUND;
        notification.flags |=Notification.FLAG_AUTO_CANCEL;
       
       Intent i = newIntent(this,MainActivity.class);
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_CLEAR_TASK);
       PendingIntent pi =PendingIntent.getActivity(MainActivity.this, 0, i, 0);
       notification.setLatestEventInfo(MainActivity.this,"Title", "Content:Hello,World", pi);

3、通過NotificationManager發送通知,例如

 nm.notify(NO_ID, notification);

4、通過NotificationManager取消通知,例如

 nm.cancel(NO_ID);

    以上介紹的是普通的Notification的一個流程,對於大布局Notification有一些區別,下面進行介紹,以BigTextStyle爲例。

先創建一個Notification.Builder對象,該對象可以設置Notification的一些屬性,如icon、tickerText等。

然後,通過以上Builder對象來設置BigTextStyle類型的Notification對象。

最後發送與普通一樣。

       Intent i = newIntent(this,MainActivity.class);
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_CLEAR_TASK);
       PendingIntent pi =PendingIntent.getActivity(MainActivity.this, 0, i, 0);
      
       final Notificationnotification;
       finalNotification.Builder noti = new Notification.Builder(this)
       .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher))
       .setContentTitle("BigText Notification")
       .setContentText("BigText")
       .setSmallIcon(R.drawable.ic_launcher)
        .setWhen(System.currentTimeMillis());
      
       notification = newNotification.BigTextStyle(noti)
         .setBigContentTitle("Big TextStyle")
          .setSummaryText(("this is sumery"))
          .bigText("Hello,World!My name isdingfeng,I am from China")
          .build();
      
       notification.tickerText= "Hello,I am coming";
       notification.defaults= Notification.DEFAULT_SOUND;
       notification.flags |=Notification.FLAG_AUTO_CANCEL;
       notification.contentIntent= pi;
      
       nm.notify(BIG_TEXT,notification);

四、常用屬性

1、常用字段:

contentIntent  設置PendingIntent對象,點擊時發送該Intent
defaults 添加默認效果
flags 設置flag位,例如FLAG_NO_CLEAR等
icon 設置圖標
sound 設置聲音
tickerText 顯示在狀態欄中的文字
when設置來通知時的時間

例如

notification.icon =R.drawable.ic_launcher;

2、常用flag位:

FLAG_AUTO_CANCEL  點擊清除按鈕或點擊通知後會自動消失
FLAG_NO_CLEAR     該通知能被狀態欄的清除按鈕給清除掉
FLAG_ONGOING_EVENT 通知放置在正在運行
FLAG_INSISTENT 是否一直進行,比如音樂一直播放,知道用戶響應

FLAG_SHOW_LIGHTS  閃燈

FLAG_ONLY_ALERT_ONCE  振一下或發個聲音

FLAG_FOREGROUND_SERVICE  到前臺來運行的服務

FLAG_HIGH_PRIORITY高優先級,即使屏蔽了statusBar也出現。一般對於電話提醒使用

例如:

notification.flags =Notification.FLAG_NO_CLEAR;

3、常用常量:

DEFAULT_SOUND使用默認提示聲音

DEFAULT_VIBRATE 使用默認手機震動 

DEFAULT_ALL使用所有默認值,比如聲音,震動,閃光等等

DEFAULT_LIGHTS 使用默認閃光提示

例如:

notification.defaults = Notification.DEFAULT_SOUND;

效果也可進行疊加

notification.defaults =DEFAULT_SOUND|DEFAULT_VIBRATE; 

notification.defaults |= DEFAULT_SOUND

notification.defaults |= DEFAULT_VIBRATE

五、NotificationCompat.Builder

Notification.Builder是android 4.0 ICS之前引入的,在此之後使用v4 SupportLibrary中NotificationCompat.Builde較多,所以在此介紹一下。

如果要在NotificationCompat.Builder對象中爲通知指定UI信息和動作,就必須先使用NotificationCompat.Builder.build()方法來創建一個通知。該方法返回一個Notification對象,調用NotificationManager.notify()方法來傳遞它到系統中。

其使用注意以下幾點:

1、必選的通知內容

如下的三個通知視覺元素是必選的:

setSmallIcon():設置一個小型icon

setContentTitle():設置一個內容標題

setContentText():設置內容細節文本

2、可選的通知內容

    除1所述的三個以外都是可選的,詳情可參考API NotificationCompat.Builder類。

3、通知的動作

    雖然動作是可選的,應該至少添加一個動作到通知中。一個動作允許用戶從通知打開某個應用程序的一個Activity中,在Activity中做進一步的工作。一個通知能夠提供多個動作。在4.1Jerry Bean之後,還可以在通知中添加按鈕來執行額外的動作(如:一個警告或即時響應的文本消息等),前提是這些按鈕的功能在Activity中可用。

在一個通知裏,其動作是通過一個含有能打開一個應用程序的Activity的意圖的PendingIntent對象來定義的。例如:當用戶在drawer中點擊通知文本的時候,如果你想要打開一個Activity,可以通過調用setContentIntent()方法來添加一個PendingIntent對象。

4、幾種Notification的代碼案例

普通Notification

 Notification normalNoti = new NotificationCompat.Builder(this)
             .setAutoCancel(true) // 設置自動清除
             .setContentInfo(String.valueOf(++normalNum))// 設置附加內容
             .setContentTitle("5 newmessages") // 設置內容標題
             .setContentText("11111111111111111")// 設置內容文本
             .setDefaults(Notification.DEFAULT_ALL)  // 設置使用所有默認值(聲音、震動、閃屏等)
             .setLargeIcon(icon) // 設置大型圖標
             .setSmallIcon(R.drawable.stat_notify_gmail)  // 設置小型圖標
             .setTicker("NormalNotification") // 設置狀態欄提示信息
             .build();

InboxStyle收件箱風格

		NotificationCompat.InboxStyle inboxStyle = new InboxStyle();
		Notification notification = new NotificationCompat.Builder(context)
		.setDefaults(Notification.DEFAULT_ALL)
		.setAutoCancel(true)
		.setContentInfo("This is a inbox")
		.setContentTitle("Inbox Notifitcation")
		.setContentText("Inbox content")
		.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher))
		.setSmallIcon(R.drawable.ic_launcher)
		.setTicker("A Inbox")
		.setStyle(inboxStyle
				.addLine("牀前明月光")
				.addLine("疑是地上霜")
				.addLine("舉頭望明月")
				.addLine("低頭思故鄉")
				.setSummaryText("李白  靜夜思"))
		.build();
		nm.notify(IN_BOX, notification);

BigTextStyle大文字風格

		NotificationCompat.BigTextStyle bigTextStyle = new BigTextStyle();		
		Notification notification = new NotificationCompat.Builder(context)
		.setDefaults(Notification.DEFAULT_ALL)
		.setAutoCancel(true)
		.setContentInfo("This is a big text")
		.setContentTitle("Big Text Notifitcation")
		.setContentText("Big Text")
		.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher))
		.setSmallIcon(R.drawable.ic_launcher)
		.setTicker("A big text")
		.setStyle(bigTextStyle.bigText("牀前明月光,\n疑是地上霜。\n舉頭望明月,\n低頭思故鄉。\n\t--李白").setBigContentTitle("靜夜思"))
		.build();
		nm.notify(BIG_TEXT, notification);

BigPictureStyle大圖片風格

		NotificationCompat.BigPictureStyle bigPictureStyle = new BigPictureStyle();
		Notification notification = new NotificationCompat.Builder(context)
		.setDefaults(Notification.DEFAULT_ALL)
		.setAutoCancel(true)
		.setContentInfo("This is a big picture")
		.setContentTitle("Big Picture Notification")
		.setContentText("Big Picture")
		.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher))
		.setSmallIcon(R.drawable.ic_launcher)
		.setTicker("A big picture")
		.setStyle(bigPictureStyle.bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.big)))
		.build();
		nm.notify(BIG_PICTURE, notification);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章