这篇文章主要来讲讲 15 年后发布的 Android 6.0 - 9.0 的版本适配。
锁屏下语音搜索
用户可以直接在锁屏状态下进行语音搜索,虽然现在的一些 Android 手机支持语音唤醒功能,但这些语音唤醒都是第三方厂商开发的,而 Android 6.0 在系统层面加入锁屏下语音搜索,这无疑会在体验上有一个明显的提升。
指纹识别
说到指纹识别,很多用户都会觉得现在的中高端 Android 手机都支持,但事实上这些 Android 手机的指纹识别都是各个厂商自行开发的并没有系统底层的支持。Android 6.0 则在系统层面加入指纹识别,能提供原生指纹识别 API,这不但降低了厂商开发指纹识别模块的成本,最重要的是原生指纹识别将会大大提升 Android 手机的指纹识别支付安全性。
更完整的应用权限管理
在此前的原生 Android 系统中有应用通知管理功能,但更为深入的应用权限管理只能靠第三方应用实现。Android 6.0 进一步强化应用权限管理,应用权限管理也成为系统级的功能,不过这对于那些权限管理软件来说并不是什么好消息。
Doze 电量管理
Android 6.0 自带 Doze 电量管理功能,在"Doze"模式下,手机会在一段时间未检测到移动时,让应用休眠清杀后台进程减少功耗,谷歌表示,当屏幕处于关闭状态,平均续航时间提高 30%。
Now on Tap功能
Now on Tap 功能是和 Google 搜索紧密结合的功能,它可以让谷歌从任何应用中进行搜索。例如,在微信中聊天的时候提到餐馆,那么就可以在不跳转的情况下进行谷歌搜索。
App Links
通过 App Links 功能,Android 平台能够向网络服务器提出申请,自主识别链接内容。直接跳转到 App 客户端中,改善用户体验,有利于让用户在体验更完善的 App 客户端完成更多操作。
(1) 动态申请权限。
(2) 指纹功能。
(3) HttpClient api 不再提供,需要引入 org.apache.http.legacy.jar。
分屏多任务
进入后台多任务管理页面,然后按住其中一个卡片,然后向上拖动至顶部即可开启分屏多任务,支持上下分栏和左右分栏,允许拖动中间的分割线调整两个 app 所占的比例。目前,Android 7.0 开发者预览版支持全部第三方应用尝试分屏操作,但个别应用适配可能存在问题,分屏后可能导致界面显示不全等问题。
全新下拉快捷开关页
在 Android 7.0 中,下拉打开通知栏顶部即可显示5个用户常用的快捷开关,支持单击开关以及长按进入对应设置。如果继续下拉通知栏即可显示全部快捷开关,此外在快捷开关页右下角也会显示一个"编辑"按钮,点击之后即可自定义添加/删除快捷开关,或拖动进行排序。
通知消息快捷回复
Android 7.0加入了全新的 API,支持第三方应用通知的快捷操作和回复,例如来电会以横幅方式在屏幕顶部出现,提供接听/挂断两个按钮;信息/社交类应用通知,还可以直接打开键盘,在输入栏里进行快捷回复。
通知消息归拢
Android 7.0 会将同一应用的多条通知提示消息归拢为一项,点击该项即可展开此前的全部通知,允许用户对每个通知执行单独操作。
夜间模式
Android 7.0 中重新加入了夜间深色主题模式,该功能依然需要在系统调谐器中开启,从顶部下划打开快捷设置页,然后长按其中的设置图标,齿轮旋转10秒钟左右即可提示已开启系统调谐器,之后用户在设置中即可找到"系统调谐器"设置项。点开其中的"色彩和外观",即可找到夜间模式,开启后即可使用全局的深色主题模式,同时亮度和色彩也会进行一定的调整,该功能可以基于时间或地理位置自动开启。另外,系统调谐器中也提供了 RGB 红绿蓝三色调节滑动条,允许用户手动精细调节,例如减少蓝色或增加红色以提供类似护眼模式的效果。
流量保护模式
Android 7.0 新增的流量保护模式不仅可以禁止应用在后台使用流量,还会进一步减少该应用在前台时的流量使用。其具体实现原理目前尚不清楚,推测其有可能使用了类似 Chrome 浏览器的数据压缩技术。此外,谷歌还扩展了 ConnectivityManager API 的能力,使得应用可以检测系统是否开启了流量保护模式,或者检测自己是否在白名单中。Android 7.0 允许用户单独针对每个应用,选择是否开启数据保护模式。
全新设置样式
Android 7.0 启用了全新的设置样式,首先每个分类下各个子项之间的分割线消失了,只保留分类之间的分割线。全新的设置菜单还提供了一个绿色的顶栏,允许用户通过后方的下拉箭头,快速设定勿扰模式等。除了勿扰模式外,顶栏菜单还可以显示诸多其他的设置状态,例如数据流量的使用情况,自动亮度是否开启等。Google 也在 Android 7.0 的设置中加入了汉堡菜单,在二级设置界面中的左上角,你就会看到这个汉堡菜单,点击后即可看到所有设置项,方便用户快速跳转。
改进的 Doze 休眠机制
Google 在 Android 7.0 中对 Doze 休眠机制做了进一步的优化,在此前的 Android 6.0 中,Doze 深度休眠机制对于改善 Android 的续航提供了巨大的作用。而在 Android 7.0中,Google 对 Doze 进行了更多的优化,休眠机制的使用规则和场景有所扩展,例如只要手动在后台删掉应用卡片,关屏后该应用就会被很快深度休眠。
系统级电话黑名单功能
Android 7.0 将电话拦截功能变成了一个系统级功能。其它应用可以调用这个拦截名单,但只有个别应用可以写入,包括拨号应用、默认的短信应用等。被拦截号码将不会出现在来电记录中,也不会出现通知。另外用户也可以通过账户体系备份和恢复这个拦截名单,以便快速导入其它设备或账号。
菜单键快速应用切换
双击菜单键,就能自动切换到上一个应用。此外,如果你不停地点击菜单键的话,就会在所有应用中不间断地轮换,应用窗口会自动放大,顶部还会出现倒计时条,停止点击且倒计时结束后,当前应用会自动放大并返回到前台。
(1) 分屏模式
分屏模式具有以下几个特点:
(2) 访问应用私有文件
在 7.0 版本之前,我们可以通过 file://
这一类 Uri 访问其他应用的私有文件或者让其他应用访问自己的私有文件。从 7.0 版本开始,这么做就不行了,如果尝试传递 file
:// Uri 来访问其他应用的私有文件会触发 FileUriExposedException 异常,分享私有文件内容的推荐方法是使用 FileProvider,FileProvider 是 v4 包下的一个类,继承自 ContentProvider。
通知中心
用户在通知界面可以发现顶部的快捷键有了更充裕的空间,并且根据网络大数据的用户使用频繁度调整了这几个快捷键的顺序;并且长按推送消息可以看到一个开关,操作它可以开启和关闭这个该应用的未来所有通知。
设置菜单
在新的 Android O 系统中,设置的界面有了大幅变化,主菜单的覆盖性变得更广,更多的功能将在子菜单中体现,并且在菜单界面中重新设计了很多图标。
PinnedShortcuts
Android 创造出了PinnedShortcuts 功能,类似苹果的 3DTouch,长按一个软件后可以弹出子菜单,然后就可以通过这个方式快捷的使用该应用的部分功能。
图标形状
新的系统中开发者可以使用不同的应用图标,比如圆角矩形或者圆形图标,不过所有的图标需要保证是同一个形状,不能有一个方一个圆这样"个性"的样式出现。
后台限制
Android O 将进一步优化后台程序,减少应用在没完全退出后占用系统的资源,并且减少电量的消耗。
安装限制
新系统中用户可以在权限设置中添加安装限制功能,这样可以有效的避免带有中国特色的"全家桶"行为。
TensorFlowLite
这个新功能并不会直接体现在手机和系统中,它是 Goolge 的一项新技术,用来把人工智能在更多的软件上继续拓展,并提高工作处理的效率,让你的手机更"聪明"。
分屏
在 Android O 中,分屏画中画功能得到了强化,变得更加流畅,而且悬浮窗可以随意拖动位置,然后在主屏幕中继续工作。正在播放视频的窗口可以悬浮在其他正在使用的 App 上方,用户可以完成多任务操作。此前,三星和 LG 等手机厂商自行“改造" Android 系统,已经融入这一功能好多年。
NotificationDots
在 Google 的 Pixel 手机上,Android 8 还新加了通知功能 Notification Dots,会标出用户的行程、信息等,有些通知还可以被设定为稍后提醒。此外长按某个应用图标现在可以显示一些信息,与 iOS 上的 3D Touch 类似,这项功能在 Android 7.0 上已经有所体现。
SmartTextSelection
系统将会预测用户将使用某些电话或者其他选项出现在将会用到的应用中,举个例子就是如果邀请朋友来吃饭,系统会根据发送的地址来开启地图并且导航。
自动保存密码
这个功能将会保存用户的部分帐号和密码,用于在网站或者应用中的快速登录,效率提升了不少。
GooglePlayProtect
这个功能主要用于 GooglePlay 中,下载的应用和游戏将会经过它的排查,来看看是否是有害甚至携带病毒的应用,不过国内用户可能不能访问 GooglePlay。
应用加速
在 Android O 中,大部分应用的启动速度将会快上一倍,这个要归功于新系统的优化,使后台占用资源减少,并且对并发进程等问题的处理更加出色,也是个相当有用的功能。
字体优化
Android O 中谷歌还增加了对系统字体的更多支持,开发者可以自行更改字体样式,让用户有了更多字体的选择。
表情符号
Android 8 还带来了符合 Unicode 10 标准的表情符号,比原来新加超过 60 个表情符,这也是比较明显的改变之一。
(1) 应用图标
由于不同的厂商对应用图标的形状有了一定的规范 (圆角、圆形等),如果不遵循它们的规范,您的应用图标可能就会被强制改成它们要求的形状,有时候改过的图标可能你的期望落差太大 。所以从 Android 8.0 系统开始,Google 对应用图标进行统一的规范。在 8.0 版本之后,应用程序的图标被分为了两层:前景层和背景层。前景层是一个背景透明的 logo,背景层一般是一张纯色或带纹理的图片。前景层和背景层组合之后,会被盖上一层 mask,这层 mask 是厂商决定的,这样一来,不管这一层 mask 是圆角还是圆形,都可以完整地显示您的 logo 了。在 mipmap-anydpi-v26下有两个xml文件代表 8.0 以上版本的启动图标,都是 xml 格式。
(2) 通知渠道
Android 8.0 对通知栏进行了比较大的改动,引入了通知渠道的概念,就好像为每种不同的消息分类别一样,例如,某个新闻app,将通知分为两种,一种为新闻类通知,一种为广告类通知。这样,就可以创建两个不同的渠道,发出通知的时候,可以根据渠道来发送,这样做的好处是便于用户去管理每个渠道的通知 (选择他们感兴趣的内容)。同时,Android 用户具有管理每个渠道的权限 (设置声音、震动等),并且可以关闭某个渠道的通知。
(3) 运行时权限
在 Android 8.0 之前,如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用。对于针对 Android 8.0 的应用,此行为已被纠正。系统只会授予应用明确请求的权限。然而,一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准。
例如,假设某个应用在其清单中列出 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE。应用请求 READ_EXTERNAL_STORAGE,并且用户授予了该权限。如果该应用针对的是 API 级别 24 或更低级别,系统还会同时授予 WRITE_EXTERNAL_STORAGE,因为该权限也属于同一 STORAGE 权限组并且也在清单中注册过。如果该应用针对的是 Android 8.0,则系统此时仅会授予 READ_EXTERNAL_STORAGE;不过,如果该应用后来又请求 WRITE_EXTERNAL_STORAGE,则系统会立即授予该权限,而不会提示用户。
(4) 悬浮窗适配
使用 SYSTEM_ALERT_WINDOW
权限的应用无法再使用以下窗口类型来在其他应用和系统窗口上方显示提醒窗口,相反,应用必须使用名为 TYPE_APPLICATION_OVERLAY
的新窗口类型。
1. 全面屏的全面支持。
2. 通知栏的多种通知。
3. 多摄像头的更多画面。
4. GPS 定位之外的 WiFi 定位。
5. 网络还有神经网络。
6. Material Design 迎来2.0时代。
7. 数字化健康。
8. 自适应功能。
(1) 前台服务需要添加权限
在 Android 9.0 版本之后,必须要授予 FOREGROUND_SERVICE 权限,才能够使用前台服务,否则会抛出异常。
(2) 限制静态广播的接收
升级 Android 9.0 之后,隐式广播将会被全面禁止,在 AndroidManifest 中注册的 Receiver 将不能够生效。
(3) 非全屏透明 Activity 禁用设置 orientation
非全屏透明页面不允许设置方向,否则会抛 Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation 异常,解决方案:android:windowIsTranslucent 设置为 false。
(4) 非 SDK 接口访问限制
在 Android 9.0 版本中,Google 加入了非 SDK 接口使用限制,无论是通过调用、反射还是 JNI 等方式,开发者都无法对非 SDK 接口进行访问,此接口的滥用将会带来严重的系统兼容性问题。 在开发过程中,开发者如果调用了非 SDK 接口,会导致应用出现 crash,无法启动;或在运行过程中出现崩溃、闪退等现象;也可能导致应用功能不可用等严重兼容性问题,其影响范围波及所有调用此接口的应用。
那么什么是非 SDK 接口呢,所谓非 SDK 接口就是所有不能够在 Google 官网上查询到的接口,Google 提供了查询接口的网站。
非 SDK 接口的类型,分为三类:
=p 时,不允许调用;
(5) 刘海屏适配
Android 9.0 版本提供了统一的挖孔屏方案和三方适配挖孔屏方案:对于有状态栏的页面,不会受到挖孔屏特性的影响;全屏显示的页面,系统挖孔屏方案会对应用界面做下移避开挖孔区显示;已经适配的P的应用的全屏页面可以通过谷歌提供的适配方案使用挖孔区,真正做到全屏显示。
(6) sensor 和麦克风后台管控
限制 sensor event 向后台应用或服务的传输,对前台应用无影响;主要是考虑隐私原因,功耗不是主要动机;对应用来说是很大的变化。影响范围:应用处于 idle 和 gone 的状态就会被管控,切换到后台一分钟应用就会进入 idle 状态,但是有前台服务的不会进入 idle 状态。
(7) 设备识别码
通过 Build.SERIAL 不再能够获取到真实数据,Build.serial:unknown,需要通过 Build.getSerial() 获取。同时需要用户授权READ_PHONE_STATE 权限。