本文进行简单的翻译和总结。
在我看来,需要重点关注如下特性:
-
指纹认证、确认凭据、App Linking、 直接分享等新特性值得重点关注,这些特性在产品中的运用可以为用户带来更好的体验;
-
可接纳的存储设备这个特性,则可能会为现有代码带来麻烦,需要进行专项检查;
-
对那些安全性敏感的应用(例如,支付类)可能需要关注助理API这个特性带来的影响;
-
如果不需要,应该考虑显示关闭应用的自动数据备份特性。
- 1. 指纹认证(Fingerprint Authentication)
- 2. 确认凭据(Confirm Credential)
- 3. App Linking
- 4. 应用自动备份(Auto Backup for Apps)
- 5. 直接分享(Direct Share)
- 6. 语音交互(Voice Interactions)
- 7. 助理API(Assist API)
- 8. 可接纳的存储设备(Adoptable Storage Devices)
- 9. 通知(Notifications)
- 10. 蓝牙笔支持(Bluetooth Stylus Support)
- 11. 改善的蓝牙低功耗扫描(Improved Bluetooth Low Energy Scanning)
- 12. Hotspot 2.0 Release 1 Support
- 13. 4K显示模式(4K Display Mode)
- 14. 主题化的ColorStateList(Themeable ColorStateLists)
- 15. 音频特性(Audio Features)
- 16. 视频特性(Video Features)
- 17. 相机特性(Camera Features)
- 18. Android企业特性(Android for Work)
新增了支持指纹认证的相关API。
在应用中要使用指纹认证,需要添加 USE_FINGERPRINT 权限:
<uses-permission
android:name="android.permission.USE_FINGERPRINT" />
然后,调用FingerprintManager#authenticate()向用户请求指纹认证。
请参考示例代码:
现在,可以使用设备的解锁方式(PIN、手势图形和密码)来认证用户, 进而授权应用访问系统Keystore中存储的凭据。
App Linking技术允许你把应用和你所拥有一个web域名进行关联。 基于这种关联,系统在处理特定的web链接时,就可以直接打开你的应用, 而无需提示用户来选择使用哪个应用。
请参考相关Training: https://developer.android.com/training/app-links/index.html
现在,系统会自动为应用进行全数据备份和恢复。
要使用这个特性,只需要把Target API设置为API Level 23(Android 6.0), 无需做任何代码改动。如果用户删除了他们的Google账户, 那么在此账户中保存的备份数据也会被一同删除。
为了让用户的分享变得更加便捷和愉悦,新增了API支持“直接分享”。
这个功能好在哪?举个简单例子来理解。 假设我正在使用A应用,A应用也支持分享内容到外部应用。 如果我要分享一段内容给微信好友,在Android 6.0之前, 我需要先选择要分享到的应用“微信”,再在打开的微信中选择好友,然后分享。 而在Android 6.0中,如果微信添加了“直接分享”的功能, 那么我在A应用中就可以直接选择微信好友进行分享了。
新增加了语音交互API,与语音指令(Voice Actions)一起,可用来构建对话式语音体验。
可调用 Activity#isVoiceInteraction() 来确定是否是被语音指令启动的。 如果是,在应用中可以使用 VoiceInteractor 类来请求用户的语音确认、 从选项列表中进行选择,等等。
大多数语音交互是由用户的语音指令发起的,但并不全是。 例如,由语音交互启动的应用也可以通过Intent启动一个语音交互。 可以通过 Activity#isVoiceInteractionRoot() 来确定, 当前Activity是由用户语音指令启动的还是由另一个语音交互应用启动的。
Android 6.0引入了一种全新的应用使用方式,即通过助理。 为了使用这个特性,用户必须允许助理使用当前上下文。 一旦允许,用户可以在任意应用中通过长按“Home”键招唤助理。
你的应用可以通过设置 WindowManager.LayoutParams#FLAG_SECURE 参数来拒绝向助理分享当前上下文。除了由系统向助理传递的那些标准信息, 你的应用还可以通过 AssistContent 分享额外的信息给助理。
现在,用户可以接纳外部存储设备(例如,SD卡)。若接纳一个外部存储设备, 将会对此设备进行加密和格式化,使其用起来跟内部存储一样。 这个特性允许用户在存储设备之间移动应用及其数据。 在移动应用时,系统依然会尊重manifest中的 android:installLocation 属性。
当应用在内部和外部存储之间移动时,由于现在数据也进行了移动, 因此跟APK、应用数据相关的文件/目录路径都会发生变化。 因此,再也不能在代码中硬编码或者持久化相应的文件路径, 而是在需要时即时去获取当前的真实路径。
受影响的Context方法:
getFilesDir()
getCacheDir()
getCodeCacheDir()
getDatabasePath()
getDir()
getNoBackupFilesDir()
getFileStreamPath()
getPackageCodePath()
getPackageResourcePath()
受影响的ApplicationInfo字段:
dataDir
sourceDir
nativeLibraryDir
publicSourceDir
splitSourceDirs
splitPublicSourceDirs
为了便于调试这个特性,可以通过如下命令,来启用对一个USB设备的采纳 (此USB设备需要通过USB OTG线跟Android设备连接):
$ adb shell sm set-force-adoptable true
Notification相关的新增API:
-
NotificationManager#getActiveNotifications(): 用来找出当前应用活跃的通知。
-
CATEGORY_REMINDER: 用来把用户安排的提醒与其它事件和Alarm区别开来。
-
INTERRUPTION_FILTER_ALARMS
-
添加对新增的Icon类的支持。
如果你的应用要执行蓝牙低功耗扫描,可以使用 ScanSettings.Builder#setCallbackType() 来指定不同的扫描任务类型,以更加节能。
现在,系统允许应用在兼容的设备上申请把显示分辨率提升到4K渲染。 可以使用 Display.Mode 来查询显示设备的物理分辨率。 如果UI在一个较低的逻辑分辨率被绘制出来,那么 Display.Mode#getPhysicalWidth() 返回的物理分辨率和 Display#getSize() 返回的逻辑分辨率有可能是不一样的。
应用在运行时,可以通过设置 window 的属性 WindowManager.LayoutParams#preferredDisplayModeId, 可以请求系统改变物理分辨率。当在4K显示模式时,UI继续以初始分辨率渲染, 然后被拉伸到4K,但SurfaceView对象可能以native分辨率来显示内容。
ColorStateList开始支持主题。
Resources#getColorStateList()和Resources#getColor()已经被废弃, 请使用新的API Context#getColorStateList()和Context#getColor()来代替。 这些方法已经在Support v4的ContextCompat提供了兼容方法。
音频处理相关的改进:
-
支持MIDI协议,新增系列API android.media.midi。
-
新增 AudioRecord.Builder 和 AudioTrack.Builder。
-
用于关联音频和输入设备的API hook。 例如,可用于从游戏控制器或者Android TV的远程摇控发起的语音搜索。
-
通过 AudioManager#getDevices() 可获取连接到当前系统的所有音频设备的列表。 也可以使用AudioDeviceCallback来监听音频设备的连接或者断开。
视频处理相关的改进:
-
新增 MediaSync,用于同步渲染音视频
-
新增 EVENT_SESSION_RECLAIMED 事件
-
新增 ERROR_RECLAIMED 错误码
-
新增 getMaxSupportedInstances()
-
新增 setPlaybackParams()
主要新增了API用于访问相机的闪光灯和图片处理。
如果设备的相机配置有闪光灯,现在可以调用 CameraManager#setTorchMode() 来直接打开或者关闭闪光灯(手电筒模式),而无须打开相机。 当相机变得不可用时,或者当其它保持手电筒模式的相机资源不可用时, 手电筒模式也会被关闭并变得不可用。 其它应用也可以调用 CameraManager#setTorchMode() 来关闭手电筒模式。 当最后一个打开手电筒模式的应用被关闭时,手电筒模式也会被关闭。
可以调用 CameraManager#registerTorchCallback() 来监听手电筒模式状态的变化。在回调被注册时,回调会被立即调用。
新增特性和API:
-
增强对Corporate-Owned, Single-Use(COSU)设备的控制:
-
禁用或者重新启用屏保。
-
禁用或者重新启用状态栏(包括快捷设置、通知等)。
-
禁止或者重新启用安全启动。
-
充电时阻止屏幕自动关闭。
-
-
静默安装/卸载应用(跟Google Play无关,无须Google账户),实现企业的应用部署需求。
-
静默的企业证书访问。
-
自动接受系统升级。
-
受托证书安装。Profile或者Device Owner可以授权第三方应用调用如下DevicePolicyManager的证书管理API:
-
getInstalledCaCerts()
-
hasCaCertInstalled()
-
installCaCert()
-
uninstallCaCert()
-
uninstallAllUserCaCerts()
-
installKeyPair()
-
-
数据使用跟踪。
-
运行时权限管理。Profile或者Device Owner可以为所有应用的运行时权限请求, 设置一个权限策略(提示用户、自动授予或者静默拒绝)。
-
设置中的VPN(Settings > More > VPN)。
-
Work状态通知。当managed profile中的应用在前台运行时, 状态栏会出现一个公文包图标,表示当前正在work profile中。