堆叠通知信息

zqum1804 8年前
   <p>在你的手机上,你不应该给相似的内容产生多条通知。比如用户收到了两条新信息时,你不应该生成两条信息而是一条总结性信息:“2条新消息”。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/534a857a856fe335890738c822b7f281.png"></p>    <p>但是总结消息在手表上是不适用的,因为如果不能在手表上阅读每条信息的细节,用户们就需要打开手机来查看消息内容。所以在手表上,你需要把所有的信息堆叠起来。被堆叠起来的信息看起来就像一张卡片,用户可以分别的查看每条信息。而且, setGroup() 方法让你的app在手机上仍然显示一条总结性的消息。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/4afbcd8a2d5627d50a09bda3be1abfe7.png"></p>    <h2><strong>把通知添加到组里</strong></h2>    <p>为了添加到正确的组,你要在调用setGroup方法的时候需要指定一个key来标识。</p>    <pre>  <code class="language-java">final static String GROUP_KEY_EMAILS = "group_key_emails";    // 建立Notification并设置到合适的组里  Notification notif = new NotificationCompat.Builder(mContext)           .setContentTitle("New mail from " + sender1)           .setContentText(subject1)           .setSmallIcon(R.drawable.new_mail)           .setGroup(GROUP_KEY_EMAILS)           .build();    // 发送通知  NotificationManagerCompat notificationManager =          NotificationManagerCompat.from(this);  notificationManager.notify(notificationId1, notif);</code></pre>    <p>接下来,当你在创建其他通知的时候,指定相同的key。这个通知将会和上面的这个通知堆叠起来。</p>    <pre>  <code class="language-java">Notification notif2 = new NotificationCompat.Builder(mContext)           .setContentTitle("New mail from " + sender2)           .setContentText(subject2)           .setSmallIcon(R.drawable.new_mail)           .setGroup(GROUP_KEY_EMAILS)           .build();notificationManager.notify(notificationId2, notif2);</code></pre>    <p>默认的,通知会按照你添加的顺序来排列,最新的通知会显示在最上面。你也可以通过调用 <a href="/misc/goto?guid=4959722865398204134" rel="nofollow,noindex">setSortKey()</a> 来按照你想要的方式排序。</p>    <h2><strong>添加总结性的消息</strong></h2>    <p>在你的手机上提供总结性的消息仍然是非常重要的,用setGroupSummary()来添加这个专用的总结消息。</p>    <p>这个总结消息将不会出现在你的手表上,而只会出现在你的手机上。</p>    <p><img src="https://simg.open-open.com/show/44112d02666790f3a295be726bfa7183.png"></p>    <pre>  <code class="language-java">Bitmap largeIcon = BitmapFactory.decodeResource(getResources(),          R.drawable.ic_large_icon);  // 建立 InboxStyle 风格的通知  Notification summaryNotification = new NotificationCompat.Builder(mContext)          .setContentTitle("2 new messages")          .setSmallIcon(R.drawable.ic_small_icon)          .setLargeIcon(largeIcon)          .setStyle(new NotificationCompat.InboxStyle()                  .addLine("Alex Faaborg   Check this out")                  .addLine("Jeff Chang   Launch Party")                  .setBigContentTitle("2 new messages")                  .setSummaryText("johndoe@gmail.com"))          .setGroup(GROUP_KEY_EMAILS)          .setGroupSummary(true)          .build();  notificationManager.notify(notificationId3, summaryNotification);</code></pre>    <p>这个通知使用了 NotificationCompat.InboxStyle ,这种风格非常适用与邮件或者消息信息。你也可以使用其他在 NotificationCompat 里定义的style或无style的总结消息。</p>    <p>tip:如果你想得到图片上的文字效果,你可以阅读 Styling with HTML markup 和 Styling with Spannables</p>    <p>总结消息也可以通过其他各种方式影响手表上通知的样子,比如你可以设置背景图片和添加action.</p>    <p>下面是添加背景图片的例子。</p>    <pre>  <code class="language-java">Bitmap background = BitmapFactory.decodeResource(getResources(),          R.drawable.ic_background);    NotificationCompat.WearableExtender wearableExtender =          new NotificationCompat.WearableExtender()          .setBackground(background);    // 建立InboxStyle notification  Notification summaryNotificationWithBackground =          new NotificationCompat.Builder(mContext)          .setContentTitle("2 new messages")          ...          .extend(wearableExtender)          .setGroup(GROUP_KEY_EMAILS)          .setGroupSummary(true)          .build();</code></pre>    <p> </p>    <p>来自:http://www.jianshu.com/p/e87ba9c5bffe</p>    <p> </p>