Skip to content

Latest commit

 

History

History
259 lines (187 loc) · 10 KB

0008-android-6.0-apis.asc

File metadata and controls

259 lines (187 loc) · 10 KB

Android 6.0 APIs

本文进行简单的翻译和总结。

在我看来,需要重点关注如下特性:

  • 指纹认证、确认凭据、App Linking、 直接分享等新特性值得重点关注,这些特性在产品中的运用可以为用户带来更好的体验;

  • 可接纳的存储设备这个特性,则可能会为现有代码带来麻烦,需要进行专项检查;

  • 对那些安全性敏感的应用(例如,支付类)可能需要关注助理API这个特性带来的影响;

  • 如果不需要,应该考虑显示关闭应用的自动数据备份特性。

1. 指纹认证(Fingerprint Authentication)

新增了支持指纹认证的相关API。

在应用中要使用指纹认证,需要添加 USE_FINGERPRINT 权限:

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />

然后,调用FingerprintManager#authenticate()向用户请求指纹认证。

请参考示例代码:

2. 确认凭据(Confirm Credential)

现在,可以使用设备的解锁方式(PIN、手势图形和密码)来认证用户, 进而授权应用访问系统Keystore中存储的凭据。

3. App Linking

App Linking技术允许你把应用和你所拥有一个web域名进行关联。 基于这种关联,系统在处理特定的web链接时,就可以直接打开你的应用, 而无需提示用户来选择使用哪个应用。

4. 应用自动备份(Auto Backup for Apps)

现在,系统会自动为应用进行全数据备份和恢复。

要使用这个特性,只需要把Target API设置为API Level 23(Android 6.0), 无需做任何代码改动。如果用户删除了他们的Google账户, 那么在此账户中保存的备份数据也会被一同删除。

5. 直接分享(Direct Share)

为了让用户的分享变得更加便捷和愉悦,新增了API支持“直接分享”。

这个功能好在哪?举个简单例子来理解。 假设我正在使用A应用,A应用也支持分享内容到外部应用。 如果我要分享一段内容给微信好友,在Android 6.0之前, 我需要先选择要分享到的应用“微信”,再在打开的微信中选择好友,然后分享。 而在Android 6.0中,如果微信添加了“直接分享”的功能, 那么我在A应用中就可以直接选择微信好友进行分享了。

6. 语音交互(Voice Interactions)

新增加了语音交互API,与语音指令(Voice Actions)一起,可用来构建对话式语音体验。

可调用 Activity#isVoiceInteraction() 来确定是否是被语音指令启动的。 如果是,在应用中可以使用 VoiceInteractor 类来请求用户的语音确认、 从选项列表中进行选择,等等。

大多数语音交互是由用户的语音指令发起的,但并不全是。 例如,由语音交互启动的应用也可以通过Intent启动一个语音交互。 可以通过 Activity#isVoiceInteractionRoot() 来确定, 当前Activity是由用户语音指令启动的还是由另一个语音交互应用启动的。

7. 助理API(Assist API)

Android 6.0引入了一种全新的应用使用方式,即通过助理。 为了使用这个特性,用户必须允许助理使用当前上下文。 一旦允许,用户可以在任意应用中通过长按“Home”键招唤助理。

你的应用可以通过设置 WindowManager.LayoutParams#FLAG_SECURE 参数来拒绝向助理分享当前上下文。除了由系统向助理传递的那些标准信息, 你的应用还可以通过 AssistContent 分享额外的信息给助理。

8. 可接纳的存储设备(Adoptable Storage Devices)

现在,用户可以接纳外部存储设备(例如,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

9. 通知(Notifications)

Notification相关的新增API:

  • NotificationManager#getActiveNotifications(): 用来找出当前应用活跃的通知。

  • CATEGORY_REMINDER: 用来把用户安排的提醒与其它事件和Alarm区别开来。

  • INTERRUPTION_FILTER_ALARMS

  • 添加对新增的Icon类的支持。

10. 蓝牙笔支持(Bluetooth Stylus Support)

11. 改善的蓝牙低功耗扫描(Improved Bluetooth Low Energy Scanning)

如果你的应用要执行蓝牙低功耗扫描,可以使用 ScanSettings.Builder#setCallbackType() 来指定不同的扫描任务类型,以更加节能。

12. Hotspot 2.0 Release 1 Support

13. 4K显示模式(4K Display Mode)

现在,系统允许应用在兼容的设备上申请把显示分辨率提升到4K渲染。 可以使用 Display.Mode 来查询显示设备的物理分辨率。 如果UI在一个较低的逻辑分辨率被绘制出来,那么 Display.Mode#getPhysicalWidth() 返回的物理分辨率和 Display#getSize() 返回的逻辑分辨率有可能是不一样的。

应用在运行时,可以通过设置 window 的属性 WindowManager.LayoutParams#preferredDisplayModeId, 可以请求系统改变物理分辨率。当在4K显示模式时,UI继续以初始分辨率渲染, 然后被拉伸到4K,但SurfaceView对象可能以native分辨率来显示内容。

14. 主题化的ColorStateList(Themeable ColorStateLists)

ColorStateList开始支持主题。

Resources#getColorStateList()和Resources#getColor()已经被废弃, 请使用新的API Context#getColorStateList()和Context#getColor()来代替。 这些方法已经在Support v4的ContextCompat提供了兼容方法。

15. 音频特性(Audio Features)

音频处理相关的改进:

  • 支持MIDI协议,新增系列API android.media.midi。

  • 新增 AudioRecord.Builder 和 AudioTrack.Builder。

  • 用于关联音频和输入设备的API hook。 例如,可用于从游戏控制器或者Android TV的远程摇控发起的语音搜索。

  • 通过 AudioManager#getDevices() 可获取连接到当前系统的所有音频设备的列表。 也可以使用AudioDeviceCallback来监听音频设备的连接或者断开。

16. 视频特性(Video Features)

视频处理相关的改进:

  • 新增 MediaSync,用于同步渲染音视频

  • 新增 EVENT_SESSION_RECLAIMED 事件

  • 新增 ERROR_RECLAIMED 错误码

  • 新增 getMaxSupportedInstances()

  • 新增 setPlaybackParams()

17. 相机特性(Camera Features)

主要新增了API用于访问相机的闪光灯和图片处理。

17.1. 闪光灯API(Flashlight API)

如果设备的相机配置有闪光灯,现在可以调用 CameraManager#setTorchMode() 来直接打开或者关闭闪光灯(手电筒模式),而无须打开相机。 当相机变得不可用时,或者当其它保持手电筒模式的相机资源不可用时, 手电筒模式也会被关闭并变得不可用。 其它应用也可以调用 CameraManager#setTorchMode() 来关闭手电筒模式。 当最后一个打开手电筒模式的应用被关闭时,手电筒模式也会被关闭。

可以调用 CameraManager#registerTorchCallback() 来监听手电筒模式状态的变化。在回调被注册时,回调会被立即调用。

17.2. 再加工API(Reprocessing API)

Camera2 API被扩充支持YUV颜色空间和私有的不透明格式图片的再加工。 可以调用 CameraManager#getCameraCharacteristics() 并传入 REPROCESS_MAX_CAPTURE_STALL 来确定当前设备是否支持再加工特性。

18. Android企业特性(Android for Work)

新增特性和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中。