Skip to content

Most visited

Recently visited

navigation

Android 6.0 API

Android 6.0 (M) 为用户和应用开发者提供了新功能。本文旨在介绍其中最值得关注的 API。

着手开发

要着手开发 Android 6.0 应用,您必须先获得 Android SDK,然后使用 SDK 管理器下载 Android 6.0 SDK Platform 和系统映像。

更新目标 API 级别

要进一步优化您的应用在运行 Android 的设备上的性能,请将您的 targetSdkVersion 设置为"23",在 Android 系统映像上安装您的应用并进行测试,然后发布更新了此变更的应用。

您可以通过在代码中加入条件,在执行您的 minSdkVersion 不支持的 API 之前检查系统 API 级别,实现在使用 Android API 的同时仍为旧版本提供支持。要详细了解如何保持向后兼容性,请阅读支持不同平台版本

如需了解有关 API 级别工作方式的详细信息,请阅读什么是 API 级别?

指纹身份验证

此版本提供了一些新的 API,在受支持的设备上,用户只需扫描其指纹即可完成身份验证,这些 API 还可与 Android 密钥库系统结合使用。

要通过指纹扫描验证用户身份,请获取新 FingerprintManager 类的实例,并调用 authenticate()方法。您的应用必须运行在带有指纹传感器的兼容设备上。您必须在应用中实现指纹身份验证流的用户界面,并在 UI 中使用标准 Android 指纹图标。FingerprintDialog 示例中包含有 Android 指纹图标 (c_fp_40px.png)。请注意,如果您要开发多个使用指纹身份验证的应用,每个应用必须独立验证用户的指纹。

要在您的应用中使用此功能,请先在清单中添加 USE_FINGERPRINT 权限。

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

要查看指纹身份验证的应用实现,请参阅FingerprintDialog 示例。要查看有关将这些身份验证 API 与其他 Android API 结合使用方法的演示,请观看视频 Fingerprint API 和 Payment API

如果您要测试此功能,请执行以下步骤:

  1. 如果您尚未安装 Android SDK 工具 24.3 修订版,请执行此操作。
  2. 转到 Settings > Security > Fingerprint,然后按照登记说明在模拟器中登记新指纹。
  3. 使用模拟器通过以下命令模拟指纹触摸事件。使用同一命令模拟锁屏上或应用中的指纹触摸事件。
    adb -e emu finger touch <finger_id>
    

    在 Windows 上,您可能需要运行带有 finger touch <finger_id> 参数的 telnet 127.0.0.1 <emulator-id> 命令。

确认凭据

您的应用可以根据用户在多久之前最后一次解锁设备来验证其身份。此功能让用户不必费心记忆应用特定密码,您也无需实现自己的身份验证用户界面。您的应用应当利用此功能并结合实现公钥或私钥,以进行用户身份验证。

要设置成功验证用户身份后可再次使用同一密钥的超时持续时间,请在设置 KeyGeneratorKeyPairGenerator 时调用新增的 setUserAuthenticationValidityDurationSeconds() 方法。

避免过多显示重新验证对话框 -- 您的应用应尝试先使用加密对象,如果超时到期,请使用 createConfirmDeviceCredentialIntent() 方法在您的应用内重新验证用户身份。

要查看此功能的应用实现,请参阅 ConfirmCredential 示例

应用链接

此版本通过提供功能更强大的应用链接,增强了 Android 的 intent 系统。您可以利用此功能将应用与您拥有的某个 Web 域关联。平台可以根据此关联确定在处理特定 Web 链接时默认使用的应用,跳过提示用户选择应用的步骤。要了解如何实现此功能,请参阅处理应用链接

自动备份应用

现在,系统可以自动为应用执行完整数据备份和恢复。您的应用的目标平台必须是 Android 6.0(API 级别 23),才能启用此行为;您无需额外添加任何代码。如果用户删除其 Google 帐户,其备份数据也会随之删除。要了解该功能的工作方式以及配置文件系统备份内容的方法,请参阅配置应用自动备份

直接共享

此版本为您提供的一些 API 可让用户直观、快捷地进行共享。现在,您可以定义可在您的应用内启动特定 Activity 的直接共享目标。这些直接共享目标通过“共享”菜单公开给用户。此功能让用户可以向其他应用内的目标(如联系人)共享内容。例如,直接共享目标可以启动另一社交网络应用中的某个 Activity,让用户可以直接向该应用中的某位朋友或某个社区共享内容。

要启用直接共享目标,您必须定义一个类,用于扩展 ChooserTargetService 类。在清单中声明您的服务。在该声明内,指定 BIND_CHOOSER_TARGET_SERVICE 权限和一个使用 SERVICE_INTERFACE 操作的 intent 过滤器。

以下示例展示了如何在清单中声明 ChooserTargetService

<service android:name=".ChooserTargetService"
        android:label="@string/service_name"
        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
    <intent-filter>
        <action android:name="android.service.chooser.ChooserTargetService" />
    </intent-filter>
</service>

对于您想要向 ChooserTargetService 公开的每个 Activity,请在您的应用清单中为其添加一个名为 "android.service.chooser.chooser_target_service"<meta-data> 元素。

<activity android:name=".MyShareActivity”
        android:label="@string/share_activity_label">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
    </intent-filter>
<meta-data
        android:name="android.service.chooser.chooser_target_service"
        android:value=".ChooserTargetService" />
</activity>

语音交互

此版本提供了一个新的语音交互 API,与语音操作一起使用时,可让您为应用打造对话式语音体验。调用 isVoiceInteraction() 方法可确定是否是响应语音操作触发了您的 Activity。如果是这样,则您的应用可以使用 VoiceInteractor 类请求用户进行语音确认、从选项列表中进行选择以及执行其他操作。

大多数语音交互都由用户语音操作发起。但语音交互 Activity 也可在没有用户输入的情况下启动。例如,通过语音交互启动的另一应用也可发送 intent 来启动语音交互。要确定您的 Activity 是由用户语音查询还是另一语音交互应用启动,请调用 isVoiceInteractionRoot() 方法。如果另一应用启动了您的 Activity,该方法会返回 false。您的应用可能随即提示用户确认其有意执行此操作。

要详细了解如何实现语音操作,请参阅语音操作开发者网站

Assist API

此版本提供了一种让用户通过助手程序与应用进行互动的新方式。要使用此功能,用户必须启用助手以使用当前上下文。启用助手后,用户可通过长按首页按钮在任何应用内召唤助手。

您的应用可通过设置 FLAG_SECURE 标记选择不与助手共享当前上下文。除了平台传递给助手的一组标准信息外,您的应用还可利用新增的 AssistContent 类共享其他信息。

要为助手提供您的应用内的其他上下文,请执行以下步骤:

  1. 实现 Application.OnProvideAssistDataListener 接口。
  2. 利用 registerOnProvideAssistDataListener() 注册此侦听器。
  3. 要提供特定于 Activity 的上下文信息,请重写 onProvideAssistData() 回调和新的 onProvideAssistContent() 回调(可选操作)。

可采用的存储设备

使用此版本时,用户可以采用 SD 卡等外部存储设备。采用外部存储设备可加密和格式化设备,使其具有类似内部存储设备的行为。用户可以利用此特性在存储设备之间移动应用及其私有数据。移动应用时,系统会遵守清单中的 android:installLocation 首选项。

请注意,在内部存储设备与外部存储设备之间移动应用时,如果您的应用访问以下 API 或字段,它们返回的文件路径将会动态变化。强烈建议:在生成文件路径时,请始终动态调用这些 API。请勿使用硬编码文件路径或之前生成的永久性完全限定文件路径。

要调试此功能,您可以将一个 USB 驱动器通过一根 USB On-The-Go (OTG) 电缆连接到 Android 设备并运行以下命令启用该 USB 驱动器:

$ adb shell sm set-force-adoptable true

通知

此版本针对通知功能引入了下列 API 变更:

蓝牙触控笔支持

此版本改善了对用户使用蓝牙触控笔进行输入的支持。用户可将兼容的蓝牙触控笔与其手机或平板电脑配对并建立连接。连接后,来自触摸屏的位置信息将与来自触控笔的压力和按键信息融合,从而实现比单纯使用触摸屏更丰富的表达。您的应用可以通过在 Activity 中注册 View.OnContextClickListener 对象和 GestureDetector.OnContextClickListener 对象,侦听触控笔按键动作并执行辅助操作。

可使用 MotionEvent 方法和常量来检测触控笔按键交互:

改进的蓝牙低功耗扫描

如果您的应用执行蓝牙低功耗扫描,可以使用新增的 setCallbackType() 方法指定您只希望在下列条件下通知回调:首次找到与设置的 ScanFilter 匹配的播发数据包,或者已过很长时间后才再次看到该数据包。这种扫描方法与旧平台版本中提供的方法相比更加节能。

Hotspot 2.0 第 1 版支持

此版本在 Nexus 6 和 Nexus 9 设备上添加了对 Hotspot 2.0 第 1 版规范的支持。要在您的应用中配置 Hotspot 2.0 凭据,请使用 WifiEnterpriseConfig 类的新方法,如 setPlmn() 方法和 setRealm() 方法。在 WifiConfiguration 对象中,您可以设置 FQDN 字段和 providerFriendlyName 字段。新增的 isPasspointNetwork() 方法可指示检测到的网络是否为 Hotspot 2.0 接入点。

4K 显示模式

现在,平台允许应用在兼容硬件上请求将显示分辨率升级到 4K 渲染。要查询当前物理分辨率,请使用新增的 Display.Mode API。请注意,如果 UI 是以较低逻辑分辨率绘制并通过放大达到更高的物理分辨率,则 getPhysicalWidth() 方法返回的物理分辨率可能不同于 getSize() 所报告的逻辑分辨率。

您可以通过设置应用窗口的 preferredDisplayModeId 属性请求系统更改应用运行时的物理分辨率。如果您想切换到 4K 显示分辨率,此功能会很有帮助。在 4K 显示模式下,UI 仍然以原始分辨率(如 1080p)渲染,通过放大达到 4K,但 SurfaceView 对象可能会以原生分辨率显示内容。

主题化 ColorStateList

对于运行 Android 6.0(API 级别 23)的设备,现在支持在 ColorStateList 中使用主题属性。Resources.getColorStateList() 方法和 Resources.getColor() 方法已弃用。如果您要调用这些 API,请改为调用新增的 Context.getColorStateList() 方法或 Context.getColor() 方法。还可在 v4 appcompat 库中通过 ContextCompat 使用这些方法。

音频功能

此版本增强了 Android 上的音频处理功能,包括:

视频功能

此版本为视频处理 API 添加了新功能,包括:

相机功能

此版本提供了下列用于访问相机闪光灯和相机图像再处理的新 API:

Flashlight API

如果相机设备带有闪光灯,您可以通过调用 setTorchMode() 方法,在不打开相机设备的情况下打开或关闭闪光灯的火炬模式。应用对闪光灯或相机设备不享有独占所有权。每当相机设备不可用,或者开启火炬的其他相机资源不可用时,火炬模式即会被关闭并变为不可用状态。其他应用也可调用 setTorchMode() 来关闭火炬模式。当最后一个开启火炬模式的应用关闭时,火炬模式就会被关闭。

您可以注册一个回调,通过调用 registerTorchCallback() 方法接收有关火炬模式状态的通知。第一次注册回调时,系统会立即调用它,并返回所有当前已知配备闪光灯的相机设备的火炬模式状态。如果成功开启或关闭火炬模式,系统会调用 onTorchModeChanged() 方法。

Reprocessing API

Camera2 API 进行了扩展,以支持 YUV 和专用不透明格式图像再处理。要确定这些再处理功能是否可用,请调用 getCameraCharacteristics() 并检查有无 REPROCESS_MAX_CAPTURE_STALL 密钥。如果设备支持再处理,您可以通过调用 createReprocessableCaptureSession() 创建一个可再处理的相机采集会话并创建输入缓冲区再处理请求。

使用 ImageWriter 类可将输入缓冲区流与相机再处理输入相连。要获得空白缓冲区,请遵循以下编程模型:

  1. 调用 dequeueInputImage() 方法。
  2. 在输入缓冲区中填充数据。
  3. 通过调用 queueInputImage() 方法将缓冲区发送至相机。

如果您将 ImageWriter 对象与 PRIVATE 图像一起使用,您的应用并不能直接访问图像数据。请改为调用 queueInputImage() 方法,将 PRIVATE 图像直接传递给 ImageWriter,而不进行任何缓冲区复制。

ImageReader 类现在支持 PRIVATE 格式图像流。凭借此支持特性,您的应用可使 ImageReader 输出图像保持为循环图像队列,还可选择一个或多个图像并将其发送给 ImageWriter 进行相机再处理。

Android for Work 功能

此版本提供了下列用于 Android for Work 的新 API:

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)