Android N 前瞻 - Notification

Google 日前已經發布了 Android N 的開發者預覽版,這比預期要提早了兩個月。雖然國內的 Rom 一般會慢半拍,可是做爲開發者提早了解一下 Android N 中的一些新特性仍是頗有必要的。html

在 Android N 中,通知迎來了一些不小的更新,開發者有了更多的方法來控制通知的外觀和行爲。因此如今來看一下 Android N 中的 Notification 有了哪些新特性:android

  • Google 提供了新的默認通知模板(更加的簡潔和清爽)。併發

  • 可以直接在 Notification 中回覆消息和更新任務事項了。app

  • 如今相關的Notification 可以被收納進一個通知組,而不是再堆滿用戶的通知欄了。ui

新的通知模板this

Android N 內置了不少新的通知模板來供咱們使用,新的通知模板更加清晰和簡潔。簡單的是,在 Android N 中系統會默認直接使用這些新的模板,因此咱們不須要額外的修改咱們已有的代碼。目前在 Android N Preview 版本中的通知欄看起來就是這樣:spa

clipboard.png

Android N 通知示例.png

我我的感受新的通知模板相比之前更能讓用戶專一於通知的內容上了,將小小的通知界面分割的更加簡潔了。在不久的之後,這就將稱爲 Android 的默認通知樣式了。code

注意咱們可使用 setColor() 方法來給咱們的通知自定義一種顏色,讓通知和應用保持風格的一致。orm

使用 setColor() 方法可以改變通知欄中的應用圖標和應用名顏色,也包括下面提到的通知內操做的文字顏色。htm

直接回復

Android N 容許用戶直接在通知中回覆消息,用戶能夠在專一於本身當前任務的同時來回復消息了,這個內置的回覆操做是經過按鈕的形式存在於通知中的。

clipboard.png

Android N 通知回覆界面(圖片來自官網).png

當用戶點擊按鈕時,系統就會將回復內容關聯到指定的 Intent 併發送該 Intent 到對應的 App。

添加內嵌回覆操做

爲通知添加內置回覆操做的步驟:

1.建立 RemoteInput.Builder 的實例,注意這裏傳入的 KEY_TEXT_REPLY 參數,以後咱們從 Intent 中取到用戶輸入的數據也須要用到它。

// Key for the string that's delivered in the action's intent.
 private static final String KEY_TEXT_REPLY = "key_text_reply";
 String replyLabel = getResources().getString(R.string.reply_label);
 RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)  
                .setLabel(replyLabel)
                .build();

2.使用 addRemoteInput() 方法來將上面建立的 RemoteInput 和通知的 action 關聯起來:

// Create the reply action and add the remote input.
Notification.Action action = new Notification.Action.Builder(
            R.drawable.ic_reply_icon, getString(R.string.label), replyPendingIntent)
            .addRemoteInput(remoteInput)
            .build();

3.爲目標 Notification 設置 action 併發出 Notification:

// Build the notification and add the action.
Notification newMessageNotification = new Notification.Builder(mContext)
            .setSmallIcon(R.drawable.ic_message)
            .setContentTitle(getString(R.string.title))
            .setContentText(getString(R.string.content))
            .addAction(action))
            .build();

// Issue the notification.
NotificationManager notificationManager = NotificationManager.from(mContext);
notificationManager.notify(notificationId, newMessageNotification);

系統就會在用戶查看通知時提示用戶輸入回覆消息了。

clipboard.png

用戶輸入回覆(圖片來自官網).png

獲得內部動做發送的數據

當用戶在通知內部進行了回覆動做以後,應用就須要獲取到用戶輸入的回覆。

1.調用 getResultsFromIntent() 並將 Notification 發出的 intent 做爲參數,就會返回一個包含了回覆信息的 Bundle。

Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);

2.使用 result key 來查詢該 Bundle,能夠單首創建一個方法來完成這個工做:

// Obtain the intent that started this activity by calling
// Activity.getIntent() and pass it into this method to get the associated string.
private CharSequence getMessageText(Intent intent) {   
    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);   
    if(remoteInput != null) {        
      return remoteInput.getCharSequence(KEY_TEXT_REPLY);    
    }    
    return null; 
 }

3.使用和以前的通知相同的 Notification ID 來建立並觸發另一個新的通知。這條通知的做用是用來提示用戶消息已經成功回覆了。當建立這條新的通知時,要使用經過 onReceive() 方法傳入的 context 對象:

// Build a new notification, which informs the user that the system
// handled their interaction with the previous notification.
Notification repliedNotification = 
            new Notification.Builder(context)
                          .setSmallIcon(R.drawable.ic_message) 
                          .setContentText(getString(R.string.replied))                
                          .build();
// Issue the new notification.
NotificationManager notificationManager = NotificationManager.from(context);
notificationManager.notify(notificationId, repliedNotification);

對於交互屬性強的 App,在處理收到的消息時包含額外的上下文信息通會常很是有用。好比,聊天類的 App 可能會想用戶經過通知欄回覆了消息後來更新用戶的消息列表。當用戶經過 RemoteInput 方法回覆了消息,開發者可使用 setRemoteInputHistory() 來更新消息列表。

設置內部回覆的樣式

理所固然的 Google 也提供了自定義內部回覆欄樣式的方法,雖然目前只是可以修改顏色 - -。具體就是咱們能夠在建立 notification builder 時使用 setColor() 方法來改變回復欄的顏色。

捆綁通知

Android N 提供了一種新的顯示多個通知的方式:捆綁通知。在收到通知的時候,若是有多個屬於同一應用的通知,那麼就會把這些通知綁定爲一個羣組。可使用 Builder.setGroup() 方法來捆綁。

捆綁以後的通知就具備了一種層次關係,能夠避免由於大量的通知擠滿用戶的通知欄而惹惱用戶了。層級結構的最頂層是父級通知,顯示通知羣組的摘要信息。用戶點擊後能夠展開通知組,顯示其中全部的自通知。

必須設置通知組中的一個通知來做爲羣組的摘要,該通知就會做爲整個通知組的頂層展現,不然你的通知就不會被顯示爲一個通知組。代碼也很簡單,只須要在建立通知的時候,同時調用
setGroup(String) 和 setGroupSummary(true) 就能夠了。

使用捆綁通知的時機

  • 子通知能夠操做,而且每一個子通知具備特定的操做。

  • 子通知中包含用戶想要查看的更多信息。

好的捆綁通知示例包括:顯示消息列表的短信應用,顯示電子郵件列表的電子郵件應用。

以上大概就是 Android N 中對 Notification 的更新,也稍微瞭解了怎麼來具體的實現。除了通知,Google 在新版本中還爲 Android 平臺加入了不少很是棒的特性,想要了解更詳細的內容,能夠查看 Android N 官方說明。

參考資料

Android N Notification 官方文檔

相關文章
相關標籤/搜索