Android 7.0 Nougat 就加入了对于通知的直接回复、整合,而第三方 ROM
必须照样画葫芦。这意味着无论购买哪家的 Android
手机,通知中心都会是一个模样。

1.通知渠道2.通知角标3.通知圆点4.通知延后5.消息样式6.通知超时7.后台执行限制8.画中画模式9.自适应图标10.蓝牙体验提升11.智能文本选择与智能共享12.WLAN感知13.取消屏幕纵横比限制14.其他

Android直接回复通知

通知直接回复

Android N/7.0

这一规定将从 Android 7.1 开始执行。如果厂商违反规定,将无法访问 Google
Play 和其他服务。

本文作者:少数派

前言

通知(Notification)可为是Android系统中富含特色的一个功能,从Android的第一个版本到Android
N,通知这个功能也发生了巨大的变化,Google几乎每个版本对通知模块都做了更新升级,可见通知在Android系统中发挥了举足轻重的作用。在Android
N中,通知模块做了如下更新:

  • 模板更新:我们正在更新通知模板,新强调了英雄形象和化身。开发者将能够充分利用新模板,只需进行少量的代码调整。
  • 消息传递样式自定义:您可以自定义更多与您的使用 MessagingStyle
    类的通知相关的用户界面标签。您可以配置消息、会话标题和内容视图。
  • 捆绑通知:系统可以将消息组合在一起(例如,按消息主题)并显示组。用户可以适当地进行拒绝或归档等操作。如果您已实现
    Android Wear 的通知,那么您已经很熟悉此模式。
  • 直接回复:对于实时通信应用,Android
    系统支持内联回复,以便用户可以直接在通知界面中快速回复短信。
  • 自定义视图:两个新的 API
    让您在通知中使用自定义视图时可以充分利用系统装饰元素,如通知标题和操作。

除开第四点直接回复是新功能以外,其它更新都是UI美观相关的。本文将会对Android
N通知模块新加的新功能通知直接回复如何使用进行阐述。阐述这个功能之前,还是先了解一下UI方面的重大变化,整个通知的样式可以说已经发生了翻天覆地的变化,如下左图是老版本的通知的样式,右图是N版本的的通知样式:

澳门新葡萄京官网注册 1

![20170223110950574.png]()

澳门新葡萄京官网注册 2

20170223110645622.png

同样的通知在Android M和Android N上显示有这么大差别,Android
N中多了一个应用的名称,这个是非常棒的一个更新,让用户能快快速辨别这是哪个APP的通知,对用户体验有很大的提升。

长按通知时,左图是老版本Android M的样式,右图是Android N的样式:

澳门新葡萄京官网注册 3

20170223110950574.png

澳门新葡萄京官网注册 4

20170223111009562.png

上图可见,长按通知时,Android
N提供更加直接快速的通知设置,且现在也可以Block系统级别的应用的通知。对于用户体验而言,这些都是非常棒的细节更新。

好了,下面就进入正题吧,如果发一个直接回复的通知。

澳门新葡萄京官网注册 5澳门新葡萄京官网注册

尽管 Android
刷版本号的步伐年年加快,但每年带给用户的惊喜从未减少。经历了四个开发者预览版的洗礼后,Android
8.0 终于在今天凌晨迎来了正式版发布。如果你还不清楚 Android O
有哪些关键的新特性,不妨让我们通过这篇文章快速为你梳理一遍。代号「奥利奥」和发布会前几天外媒传出的消息一样,Android
8.0 的甜品代号果然是「奥利奥」。

创建通知

由于本文是基于Android
N的功能开发,所以本文中应用的一些类和方法都是以SDK的API level
24,如果在实际开发当中,如果读者开发的APP需要在低版本的Android系统,读者需要考虑一下兼容性而不能直接引用本文章中的例子的代码。如本文中应用Notification.Builder(Android
3.0),为了兼容低版本,应该使用版本 4 支持库中的
NotificationCompat.Builder

首先来回顾一下怎样创建一个普通的通知。创建一个通知,有些内容是可选的,有些内容是不可选的,因此,必需的通知内容:

  • 小图标,由 setSmallIcon() 设置
  • 标题,由 setContentTitle() 设置
  • 详细文本,由 setContentText() 设置

下面就开始吧

澳门新葡萄京官网注册 6

澳门新葡萄京官网注册 7

创建notification对象

运用notification的建造者模式,简单容易地创建notification对象,如下:

Notification notification = new Notification.Builder(this)
        .setSmallIcon(Icon.createWithResource(this.getPackageName(),R.drawable.my_default_icon_label))
        .setContentText("You can reply on notification.")
        .setContentTitle("Test Notification")
        .build();

如上面的代码,这是一个仅包含了必须内容的Notification对象,由于这些代码都非常常用了,本文就不再过多的赘述。

稿源:快科技

而昨晚的发布会碰巧赶上了美国日全食,为此 Google
也准备了一段应景的揭晓视频:从奇巧板到牛轧糖再到这次的奥利奥,不得不说近几个
Android
版本所选择的甜品都非常可口。在开始新功能介绍之前,我们不妨通过下面这张长图回顾一下
Android 历代甜品代号:

添加一个Action

在Android
4.4的版本中,通知的更新升级就增加了Action功能,所谓Action功能,就是通知有一个或多个按钮可以点击。如下图:

澳门新葡萄京官网注册 8

20170223111039013.png

实现代码就是调用addAction()方法,如下:

Notification notification = new Notification.Builder(this)
    .setSmallIcon(Icon.createWithResource(this.getPackageName(), R.drawable.my_default_icon_label))
    .setContentText("You can reply on notification.")
    .setContentTitle("Test Notification")
    .setAutoCancel(true)
    .addAction(
            new Notification.Action.Builder(
                    null,
                    "My Action",
                    null)
                    .build())
    .build();

澳门新葡萄京官网注册 9

添加一个广播接收Action事件

当点击通知的Action按钮,把点击事件,发送给一个广播接收者,代码如下:

//创建一个启动广播的Intent
Intent quickIntent = new Intent();
quickIntent.setAction("quick.reply.input");

//创建Notification对象
Notification notification = new Notification.Builder(this)
    .setSmallIcon(Icon.createWithResource(this.getPackageName(), R.drawable.my_default_icon_label))
    .setContentText("You can reply on notification.")
    .setContentTitle("Test Notification")
    .setAutoCancel(true)//点击通知时自动消失
    .addAction(
            new Notification.Action.Builder(
                    null,
                    "MyAction",
                    //把Intent转换成PendingIntent
                    PendingIntent.getBroadcast(this, 1, quickIntent,
                            PendingIntent.FLAG_ONE_SHOT))
                    .build())
    .build();

//创建广播接收器
BroadcastReceiver br = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        unregisterReceiver(this);
    }
};

//注册广播接收器
IntentFilter filter = new IntentFilter();
filter.addCategory(this.getPackageName());
filter.addAction("quick.reply.input");
registerReceiver(br, filter);

通知——往往是 Android 系统的信息过载的「重灾区」,也是近三个大版本以来
Google 不断在优化和改进的重点。在 Android 8.0 中,通知系统有了如下改进:

添加直接回复输入框

添加直接回复输入框,调用Notification.Action.Builder的addRemoteInput()方法,并创建一个RemoteInput对象作为参数,RemoteInput.Builder创建对象时传入参数key,该key就是输入框内容的key,在接收内容的地方通过key取得内容。如果没有key也可以取得内容,就需要先遍历所有的数据,先取得key,再取得内容。如下:

Notification notification = new Notification.Builder(this)
        .setSmallIcon(Icon.createWithResource(this.getPackageName(),R.drawable.my_default_icon_label))
        .setContentText("You can reply on notification.")
        .setContentTitle("Test Notification")
        .setAutoCancel(true)
        .addAction(
                new Notification.Action.Builder(
                        null,
                        "MyAction",
                        PendingIntent.getBroadcast(this, 1, quickIntent,
                                PendingIntent.FLAG_ONE_SHOT))
                        //直接回复输入框,quick_notification_reply是key
                        .addRemoteInput(new RemoteInput.Builder("quick_notification_reply")
                            .setLabel("Please input here!").build())
                        .build())
        .build();

效果如下图:

澳门新葡萄京官网注册 10

20170223111140170.png

Android 8.0
引入了通知渠道特性,将应用的通知进行分门别类,用户可以针对不同的通知类别单独设置通知优先级别和提醒方式。

把直接回复的内容发送到广播接收器

在广播中接收通知输入框的内容,并显示在APP的TextView上,实现如下:

BroadcastReceiver br = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle results = RemoteInput.getResultsFromIntent(intent);
        if (results != null) {
            CharSequence result = results.getCharSequence("quick_notification_reply");
            if (TextUtils.isEmpty(result)) {
                ((TextView) findViewById(R.id.tv)).setText("no content");
            } else {
                ((TextView) findViewById(R.id.tv)).setText(result);
            }
        }
        nm.cancelAll();
        unregisterReceiver(this);
    }
};

如上面的代码,通过RemoteInput的getResultsFromIntent()方法,把Intent中的输入框内容取出来,然后通过key以方法getCharSequence()取得输入框输入的内容,把内容显示在TextView上。

效果如下:

澳门新葡萄京官网注册 11

澳门新葡萄京官网注册 12

结合Hands Up带来超棒的用户体验

Android更新直接回复通知的功能,出于给用户便捷、快速的操作体验,但是用户也要下拉通知栏才能进行回复,如果用户正在使用设备,通过Heands
Up就能把直接回复通知这个功能的便捷性淋漓尽致的体现出来。

与Hands
Up结合,只需要在原本的基础上,设置setFullScreenIntent()即可,实现如下:

Notification notification = new Notification.Builder(this)
        .setSmallIcon(Icon.createWithResource(this.getPackageName(), R.drawable.my_default_icon_label))
        .setContentText("You can reply on notification.")
        .setContentTitle("Test Notification")
        .setAutoCancel(true)
        //Hands Up
        .setFullScreenIntent(PendingIntent.getActivity(this, 1,                     
            quickIntent,PendingIntent.FLAG_ONE_SHOT), true)
        .addAction(
                new Notification.Action.Builder(
                        null,
                        "MyAction",
                        PendingIntent.getBroadcast(this, 1, quickIntent,
                                PendingIntent.FLAG_ONE_SHOT))
                        //直接回复输入框
                        .addRemoteInput(new RemoteInput.Builder("quick_notification_reply").setLabel("Please input here!").build())
                        .build())
        .build();

效果如下:

澳门新葡萄京官网注册 13

20170223111559596.gif

Google 的时钟应用提供了 4
个通知渠道假想一下,适配了这一特性的淘宝客户端,我们可以屏蔽那些直播通知和促销推荐,物流信息、秒杀提醒则可以适当「放行」。

Hands Up直接回复通知不消失的问题

在Android 7.0的直接回复通知结合Hands
Up一起使用时,当用户在输入框输入内容后,点击发送按钮时,应用调用NotificationManager.cancel()方法取消通知,发现通知还在通知栏,这时需要用户下拉通知栏,通知才会自动消失。这可能会给用户带来不好的用户体验。这个问题不是issue,是Android本身的设计,引用官方一段注释:

// A cancel() in repsonse to a remote input shouldn't be delayed, as it makes the sending look longer than it takes.

解决这个问题可以通过当用户在通知输入完成后,APP成功接收到通知输入的内容后,即APP认为该通知应该消失了,在调用NotificationManager.cancel()前,先更新通知,把通知的Hands
Up特性去除,即去除setFullScreenIntent(),然后再调用NotificationManager.cancel()即可。

在早前的 Android 版本中,我们只能借助第三方启动器和通知读取工具(比如
Nova Launcher+Telsa)来实现通知角标效果。

总结

本文阐述了Android
N中更新的新功能直接回复通知,这个功能给用户带来方便、快速操作的特点,对于即时通讯、短信等功能非常有用。通过结合Hands
Up通知,能真正发挥直接回复所带来的好处,无疑给用户带来超棒的使用体验。但是,目前快速回复通知只支持text,也就是纯文本,希望在以后能有更加丰富的类型。

澳门新葡萄京官网注册 14

Android 8.0
开始,应用可以在启动器图标上显示通知圆点来提示用户,但这个圆点角标和 iOS
上那个有所不同——它仅提示用户该应用有通知,不会显示具体的通知数量。考虑到部分用户的「红点强迫症」,这算是一种折衷的设计了……

通常,当一条通知出现在通知栏,除了点击查看、划掉不理以外,我们就只剩下「放任不管」这种处理方式了。这显然不太优雅,太多的通知驻留不仅会让通知栏拥挤不堪,回过头进行处理的时候也很不方便。所以,Android
8.0
引入了另一种通知处理操作——通知延后。当我们暂时不便处理某条应用通知时,只需要在该条通知上清扫,点击出现的时钟图标,即可让这条通知暂时从通知栏消失,在设定好的时间后再回来。

澳门新葡萄京官网注册 15

通知延后功能演示理论上来说,如果开发者在开发应用时没有进行特殊限制,所有的非常驻通知都可以被延后。

Android 8.0
提供了新的通知背景着色方式,除了大家可能已经见过的多彩媒体通知以外,一些常驻高优先级通知也可以利用这种背景着色方式来让自己更加引人注目,比如驾驶导航和后台通话通知。目前,一些使用原生通知样式的应用已经可以在
Android 8.0 上正确调用新的通知背景着色机制了,效果也十分讨人喜爱。

澳门新葡萄京官网注册 16

消息样式

原生 Android
系统的消息通知向来好用——我们不仅可以通过消息通知进行快速回复,还能通过扩展试图看到多条消息通知并逐条回复(详情请参阅
Android Nougat 的通知改进详解)。在 Android 8.0
中,消息通知样式得到了进一步完善。开发者可以通过新的通知函数来为消息通知的扩展视图增加消息历史,让用户在快速处理通知的过程中更加熟悉回话上下文。

通知超时

除了上面提到的通知延后功能以外,Android 8.0
还面向开发者提供了通知超时特性,允许特定通知在设定时间后自行清除;进而,系统还能区分某条应用的清除操作是由用户还是应用发出。利用这些特性,应用开发者能够探索设计出对用户造成打扰程度最小的通知方式。系统级自动填充框架不管是在手机上注册账号、登录账号还是输入其他常用个人信息,过程都相当繁琐且容易出错,选择第三方密码管理和自动填写工具又不得不额外考虑安全和隐私问题。因而在
Android 8.0 中,Google
首次整合了一个系统级的全局自动填写功能。开启后,当我们在第一次进行应用设置、登录时,系统就会帮我们快速填写好对应的个人信息和密码。

澳门新葡萄京官网注册 17

系统级自动填写使用起来非常方便当然,如果不想使用 Google
提供的密码保存服务,也可以等待 1Password、LastPass
等服务商跟进这一特性,到时我们就可以在「系统->语言和输入法->输入帮助」自由选择想要使用的自动填充服务。

澳门新葡萄京官网注册 18

未来会有更多应用适配这一特性

优秀的多任务处理能力一直以来都是 Android
系统的魅力所在,但同时运行的应用太多肯定会为系统造成不小的负担。如果还有应用或服务在后台运行,而用户正在使用其他需要大量系统资源的应用(例如玩游戏或观看视频),就会因为硬件性能不足导致卡顿,部分应用可能还需要重新加载。为此,Android
8.0 对应用在后台运行时可以执行的操作施加了限制,面向 Android 8.0
进行开发的应用将在两个方面受到限制:后台服务限制:处于空闲状态时,应用可以使用的后台服务存在限制。广播限制:除了有限的例外情况,应用无法为隐式广播注册接收器。不清楚何为「服务」何为「广播」也没关系,只需要知道:当一个面向
Android 8.0
开发或被用户手动开启了后台限制的应用被放到后台运行时,系统在为它分配各项系统资源时就会「酌情考虑」了。

澳门新葡萄京官网注册 19

这个后台执行限制此前也存在缺陷和不足,好在经过绿色守护开发者 @oasisfeng
和部分热心 Android 用户的热心反馈,Google
已于第四个开发者预览版中修复了后台服务管控漏洞。即便是那些顽固的国产毒瘤,在
Android 8.0 中也不得不收敛了。

Android Nougat
引入了应用「分屏」功能,允许用户将任意两个的应用或窗口在屏幕上进行上下分屏,提升了应用间的协作和使用效率。而从
Android 8.0
开始,系统将支持更加自由、灵活的「画中画」模式。这个通常用于视频播放的特性早已在部分
OEM 厂商的定制 ROM 和 Android TV 当中的实现,但加入原生 Android 8.0
依然令人惊喜。

澳门新葡萄京官网注册 20

一边看视频一边浏览其他内容如果你订阅了 YouTube Red
并开启了「后台播放功能」,系统就能在你把 YouTube
放到后台的同时将视频内容以悬浮窗的形式继续播放;当你在 Chrome
中查看网页视频时,也可以将某个标签中的视频「拿出来」,一边浏览其他网页一边查看视频;知名
Android 播放器 VLC 也抢在正式版发布前就适配了画中画模式,升级 Android
8.0 正式版以后别忘了试一试。

Android 系统上到底改采用异形图标还是规则图标?在这个问题上,不同的 OEM
厂商和用户都有自己的选择偏好。这也导致不同 Android
设备的体验迥异,百花齐放的表象之下,无论是应用开发者和图标设计师们往往感到很迷茫。为了解决这个问题,Google
在 Android 8.0
中引入了自适应图标规范。依据这一规范开发的自适应图标不仅可以最大程度上保留自己的特色,同时还能完美地融入到不同启动器和
ROM 的整体视觉风格当中。

澳门新葡萄京官网注册 21

除此之外,应用开发者还能脑洞大开,赋予这些图标不同的动态效果。

澳门新葡萄京官网注册 22

关于自适应图标规范的意义所在以及开发者如何进行设计和适配,请参阅少数派先前发布的译文:Android
O 自适应图标的意义何在?Google 设计师给你答案 |
科普设计自适应图标实现自适应图标Android O
新特性介绍:自适应图标(Adaptive Icons)

Android 8.0 还从多个角度增强了原生 Android
平台对蓝牙的支持,具体包括:支持 AVRCP 1.4 标准:支持远程浏览和控制
TV、HiFi 等设备的媒体库。支持蓝牙低功耗 5.0
标准:传输速度提升两倍、传输距离提升四倍、数据承载能力提升八倍。此外,5.0
标准还优化了时隙可用性和信道选择算法,可规避 Wi-Fi 和 LTE
信道干扰来提高数据传输质量。集成更多蓝牙协议编解码器,包括由 Sony 提供的
LDAC 编解码器。毫无疑问,Android 8.0
对于那些爱听歌的用户来说是一次良心满满的升级:只要手里蓝牙耳机满足硬件要求,就可以轻松实现无损蓝牙音乐传输。

利用机器学习和人工智能,当我们在 Android 8.0
中进行文字点选操作时,系统会自动识别我们想要复制的文字内容。在长按弹出的浮动工具条中,系统还将提供可用于处理被选中部分文字内容的应用选项。

澳门新葡萄京官网注册 23

自动识别文字内容并提供应用建议 –
1例如,当我们长按一段文字中地址的一部分,系统不仅会将整个地址内容进行选中,还能在弹出的浮动工具条中显示地图应用,点击即可快速调用地图打开选中地址;同理,如果我们选中的是一段
URL,那么 Chrome
浏览器就会出现在弹出的浮动工具条中,方便我们快速跳转至该 URL
所指向的网页。

澳门新葡萄京官网注册 24

自动识别文字内容并提供应用建议 – 2同样的技术也将运用于 Android 8.0
的「分享」接口中,如果我们试图分享一张购物小票的照片,在分享列表中,系统会优先建议那些记账应用;而如果我们分享一张自拍,美颜应用则更可能会出现在分享菜单的前列。

Android 8.0 新增了对 WLAN 感知的支持,此技术基于周边感知联网
规范。在具有相应 WLAN 感知硬件的设备上,应用和附近设备可以通过 WLAN
进行搜索和通信,无需依赖互联网接入点。

澳门新葡萄京官网注册 25

开启 WLAN 感知功能后,当我们位于已保存的 WiFi
连接附近时,系统就会自动使用这个 WiFi 接入点。

以 Android 7.1(API 级别
25)或更低版本为目标平台开发的应用默认最大屏幕纵横比为
1.86,但这也导致这些应用在一些新近机型(比如 Galaxy
S8/S8+)上显示效果不佳(无法全屏、上下黑边等等)。

澳门新葡萄京官网注册 26

采用非传统屏幕纵横比的新近机型 | 源:bgr而面向 Android 8.0
或更高版本系统所开发的应用将不要求设定最大纵横比,保证应用能够最大限度地兼容屏幕比例各异的
Android 机型。

对开发者而言,他们还可以利用下面这些 Android 8.0 新特性:

  • 可下载字体、xml 定义字体:Android 8.0
    开始完全支持自定义字体,应用可以从字体提供服务方下载使用字体,或在
    XML 中定义字形族群 (font families)——声明字体风格、粗细与字体文件。
  • 自适应 TextView、统一布局边距:Android 8.0 允许开发者根据 TextView
    的大小自动设置文本展开或收缩的大小,对开发者而言,在不同屏幕上优化文本大小或者优化包含动态内容的文本大小要比以往简单多了。
  • 更丰富的色彩管理功能:应用开发者只需为应用嵌入广色域配置文件,即可在支持广色域色彩显示的新设备上开启广色域显示模式。
  • 多显示器支持:Android 8.0
    将提供更好的原生多显示器支持。如果某个应用或活动
    支持多窗口模式,并且可以在具有多个显示器的设备上运行(例如 Samsung
    DeX),那么用户可以在两个显示设备间自由操作和移动窗口内容。
  • 可声明应用类别:开发者还可以为面向 Android 8.0
    所开发的应用声明应用类别,方便用户和其他第三方应用根据类别进行分类显示。

本文作者:少数派原文链接: