Android N 中的 Notification 通知

原文来自: Android Developers Blog —— Notifications in Android N

Android 通知往往是在你的Android应用和用户之间制造或打破而相互作用。为了提供更好的用户体验,Android N上的通知已经接收到视觉的更新,对于自定义视图更好的支持,以及直接回复形式的扩展功能,一个全新的消息风格,和捆绑通知

相同的通知,新的面貌

首先最明显的变化就是通知的默认外观已经显著变化,许多被周围的通知扩散区域已经折叠到了一个新的标题里面,和你的应用的应用图标以及名字固定通知。这个变化确保了标题、文本和大图标被给予最大量的空间的可能性,并且其结果就是,现在的通知通常稍大了,更容易阅读。

notifications-in-android-n_pic1

鉴于单行标题,这是比以往的信息的有用性更重要,当你的目标是Android N 的时候,默认的情况下时间会被隐藏,不会显示出来—— 如果你有一个时间危机的通知,比如说是一个消息应用程序,你能够使用setShowWhen(true)重新开启它。此外,内容下面一小行的文字将会优先于你设置的任何内容信息:只有当你指定Android N 之前的早期版本才会同时出现。在所有的情况下,确保内容下面一小行的文字是符合标题且有用的——比如说,如果用户仅仅只有一个账户,不要添加一个账户邮箱地址作为你的内容下面一小行的文字。

通知操作也得到了重新的设计,现在以下的通知条条目在视觉上是不同的。

notifications-in-android-n_pic2

你会注意到,图标都没有出现在新的通知;而是提供了标签本身在通知栏有限的空间里更多的空间。然而,通知操作图标仍然需要请求并继续在Android旧版本设备上使用,比如说Android Wear.

如果你将利用NotificationCompat.Builder构建一个你的通知,你可以在那儿使用标准样式风格,你将会得到全新面貌和感觉,默认的情况下,不需要进行更改代码的请求。

对于自定义视图提供更好的支持

如果你不是从自定义RemoteViews来代替构建你的通知,适配任何全新风格就已经成为挑战了。从一个通知正文+标题,利用全新的标题、伸缩特性、动作、和大图标定位作为一个独立元素,我们将介绍一个全新的DecoratedCustomViewStyleDecoratedMediaCustomViewStyle去提供所有的这些元素,允许你用新的setCustomContentView()方法只关注内容。

notifications-in-android-n_pic3

这也确保了未来的外观和感觉应该被显著简单的适配,在应用那边不需要修改任何代码这些样式将平台一起进行更新。

直接回复

当通知已经有了可以启动一个Activity或者在使用一个Sevice或者BroadcastReciver在后台工作的操作,直接回复(Direct Reply)允许你构建一个动作,利用通知操作直接接受通知单行文本输入。

notifications-in-android-n_pic4

直接回复使用了相同的RemoteInputAPI——最初是在Android Wear里引人的——对于标记一个能够接受让用户直接输入。标记一个动作(Action)作为能够直接接收来自用户的输入。

该RemoteInput本身包含像将被用于以后检索的输入,和用户开始输入之前所显示的提示文本的关键信息。

1
2
3
4
5
6
7
8
// Where should direct replies be put in the intent bundle (can be any string)
private static final String KEY_TEXT_REPLY = "key_text_reply";

// Create the RemoteInput specifying this key
String replyLabel = getString(R.string.reply_label);
RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
.setLabel(replyLabel)
.build();

一旦你已经构建了RemoteInput,它可以通过适当命名的addRemoteInput()方法连接到你的Action操作。你可能会考虑调用setAllowGeneratedReplies(true)方法去开启Android Wear 2.0产生Smart Reply(智能回复)的选择,当它可用的时候,能使用户更容易迅速作出反应。

1
2
3
4
5
6
// Add to your action, enabling Direct Reply for it
NotificationCompat.Action action =
new NotificationCompat.Action.Builder(R.drawable.reply, replyLabel, pendingIntent)
.addRemoteInput(remoteInput)
.setAllowGeneratedReplies(true)
.build();

请记住,pendingIntent被传递到你的Action动作应该是一个Activity,在Marshmallow以及更低版本的设备上是不支持直接回复功能(你将希望锁屏,开启一个Activity,有一个焦点输入框让用户可以直接在里面输入回复),应该是一个Service(如果你需要这样做需要在一个另外的线程)或者是BroadcastReceiver(它运行在UI主线程)在Android N 设备上,因此,甚至从锁屏背景下的文本输入这么一个流程(这儿是一个另外的用户从系统设置中去控制一个被锁的设备直接回复启用/禁用)

在你的Service或者BroadcastReceiver里提取文本输入,可以使用到的帮助:
RemoteInput.getResultsFromIntent() 方法

1
2
3
4
5
6
7
private CharSequence getMessageText(Intent intent) {
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
if (remoteInput != null) {
return remoteInput.getCharSequence(KEY_TEXT_REPLY);
}
return null;
}

之后你将处理文本,你必须更新通知,这个是隐藏UI直接回复,应该作为一种技术来确认用户他们答复接收和正确处理的触发。

对于多数模板,这都应该涉及使用追加答复到通知的底部新的setRemoteInputHistory()方法,直到主要内容被更新的其他答复被追加到历史(比如说其他人回复)

notifications-in-android-n_pic5

然而,如果你将构建一个消息类型的应用程序,预计来回交流对话,你应该使用MessagingStyle并使附加消息追加到它上面。

MessagingStyle

我们已经对正在进行对话进行了优化,并使用了新的MessagingStyle进行直接回复的体验

notifications-in-android-n_pic6

这个样式风格提供了内置的通过addMessage()返回添加多个消息格式的方法。每一个条消息支持传入文本本身,时间戳和消息的发送者(因此很容易支持群组对话)

1
2
3
4
5
6
builder.setStyle(new NotificationCompat.MessagingStyle("Me")
.setConversationTitle("Team lunch")
.addMessage("Hi", timestampMillis1, null) // Pass in null for user.
.addMessage("What's up?", timestampMillis2, "Coworker")
.addMessage("Not much", timestampMillis3, null)
.addMessage("How about lunch?", timestampMillis4, "Coworker"));

你将会注意到,这种风格对于具体的消息表示一流的支持从用户和他们填写的名字(使用”我”这种情况),并设置一个可选的对话标题。当这个可以手动的使用一个BigTextStyle,通过Android Wear 2.0 使用这种风格的用户,将会获得直接内嵌的行来响应,抛弃了踢出来扩展通知来看,制造了一个无缝体验,而无须构建一个完整的可穿戴的应用程序。

捆绑通知

一旦你使用了一个全新的视觉设计去构建一个伟大的通知,直接回复、信息风格、和我们以前所有的最佳实践,考虑整体的通知体验是非常重要的,特别是如果你发布多个通知(说,每个正在进行会话或者每个新的电子邮件线程之间)

notifications-in-android-n_pic7

捆绑通知(Bundled notificaiton)提供了两全其美:当用户正在寻找其他通知一个单条的摘要通知或者希望在所有的通知上同时操作展开组操作个体通知(包括使用操作和直接回复)

如果你将要构建Android Wear通知栈,和这里的API使用方法完全相同,只需要添加setGroup())到每一个通知就能将这些通知捆绑在一起了。你不局限于一组,所以捆绑通知恰如其分。对于电子邮件应用程序,你可以考虑每个帐户一个捆绑的实例。

创建一个摘要通知(summary notification)也是重要的,这个摘要通知,通过 setGroupSummary(true),它仅仅是通知出现在Mashmallow及其低版本设备上,应该(你猜对了)总结所有个人通知。这是一个使用InboxStyle最合适的时候。虽然使用它不是一个要求。在Android N及其更高版本的设备上,一些信息(比如说subText,subtext, content intent, and delete intent)是从摘要的通知中提取生产倒塌通知捆绑的通知,所以你应该继续产生的所有API级别的摘要通知。

为了提高在Android N个器件的整体用户体验,发布4个或者更多通知没有组的通知,这些通知将会被自动捆绑在一起

N是为了通知

通知在Android上已经渐进增强的稳定区了。从Gingerbread时代的一个敲击目标到可以展开的通知、操作动作、媒体风格,以及现在的特性,比如直接回复和捆绑通知,通知在Android上所有用户体验中扮演了一个重要的部分。

利用现在许多新的工具去使用(NotificationCompat帮助向后兼容),我很高兴地看到你如何来使用它们去#构建更好的应用程序

1-S6K7IYkWhCzkS6YAgxLfXw

以上是对Anroid 官网博客文章的翻译,如果不足,欢迎指正,谢谢。

0%