page.title=API 概览 page.keywords=预览版,sdk,兼容性 page.tags=previewresources, androidm sdk.platform.apiLevel=22-mnc page.image=images/cards/card-api-overview_16-9_2x.png @jd:body
M 开发者预览版可让您预览即将推出的 Android 平台版本为用户和应用开发者提供的新功能。 本文旨在介绍其中最值得关注的 API。
M 开发者预览版的适用对象是喜欢尝鲜的开发者和测试人员。 如果您有兴趣影响 Android 框架的发展方向,欢迎试用 M 开发者预览版并向我们提供反馈!
注意:请不要在 Google Play 商店中发布基于 M 开发者预览版的应用。
注:本文经常提及的一些类和方法在 developer.android.com 上尚未提供相关参考资料。 这些 API 元素在本文中设置为 {@code code style} 格式(不带超链接)。 如需查看这些元素的初步 API 文档,请下载预览版参考资料。
如果您之前发布过 Android 应用,请注意您的应用可能受到平台变化的影响。
如需了解完整信息,请参阅行为变更。
此预览版通过提供功能更强大的应用链接,增强了 Android 的意向系统。您可以利用此功能将应用与您拥有的某个 Web 域关联。 平台可以根据此关联确定在处理特定 Web 链接时默认使用的应用,跳过提示用户选择应用的步骤。如需了解如何实现此功能,请参阅应用链接。
现在,系统可以自动为应用执行完整数据备份和恢复。对于以 M 预览版为目标平台的应用,系统会默认启用此行为,您无需额外添加任何代码。 如果用户删除其 Google 帐户,其备份数据也会被删除。 如需了解该功能的工作方式以及配置文件系统备份内容的方法,请参阅自动备份应用。
本预览版提供一些新的 API,在受支持的设备上,用户只需扫描其指纹即可完成身份验证,还可检查系统最后一次使用设备解锁机制(如锁屏密码)对用户进行身份验证是发生在多久之前。 这些 API 可与 Android 密钥库系统结合使用。
如需通过指纹扫描验证用户身份,请获取新增 {@code android.hardware.fingerprint.FingerprintManager} 类的实例,并调用 {@code FingerprintManager.authenticate()} 方法。您的应用必须运行在带有指纹传感器的兼容设备上。 您必须在应用中实现指纹身份验证流的用户界面,并在 UI 中使用标准 Android 指纹图标。示例应用中包含有 Android 指纹图标 ({@code c_fp_40px.png})。请注意,如果您要开发多个使用指纹身份验证的应用,每个应用必须独立验证用户的指纹。
如需在您的应用中使用此功能,请先在清单文件中添加 {@code USE_FINGERPRINT} 权限。
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
如需查看指纹身份验证的应用实现,请参阅指纹对话框示例。
如果您要测试此功能,请执行以下步骤:
adb -e emu finger touch <finger_id>
在 Windows 上,您可能需要运行带有 {@code finger touch <finger_id>} 参数的 {@code telnet 127.0.0.1 <emulator-id>} 命令。
您的应用可以根据用户在多久之前最后一次解锁设备来验证其身份。此功能让用户不必费心记忆应用特定密码,您也无需实现自己的身份验证用户界面。 您的应用应当利用此功能并结合实现公钥或私钥,以进行用户身份验证。
如需设置成功验证用户身份后可再次使用同一密钥的超时持续时间,请在设置 {@link javax.crypto.KeyGenerator} 或 {@link java.security.KeyPairGenerator} 时调用新增的 {@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} 方法。 此功能目前适用于对称加密操作。
避免过多显示重新验证对话框 -- 您的应用应尝试先使用加密对象,如果超时到期,请使用 {@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} 方法在您的应用内重新验证用户身份。
如需查看此功能的应用实现,请参阅确认凭据示例。
本预览版为您提供的 API 可让用户直观、快捷地进行共享。现在,您可以定义可在您的应用内启动特定活动的直接共享目标。这些直接共享目标通过“共享”菜单公开给用户。 此功能让用户可以向其他应用内的目标(如联系人)共享内容。 例如,直接共享目标可以启动另一社交网络应用中的某个活动,让用户可以直接向该应用中的某位朋友或某个社区共享内容。
如需启用直接共享目标,您必须定义一个类,用于扩展
{@code android.service.}
{@code chooser.ChooserTargetService} 类。在清单文件中声明您的
{@code ChooserTargetService}。在该声明内,指定
{@code BIND_CHOOSER_TARGET_SERVICE} 权限和一个带有
{@code SERVICE_INTERFACE} 操作的意向过滤器。
以下示例展示了如何在清单文件中声明 {@code 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>
对于您想要向 {@code ChooserTargetService} 公开的每个活动,请在您的应用清单文件中为其添加一个名为 {@code "android.service.chooser.chooser_target_service"} 的 {@code <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,与 语音操作一起使用时,可让您为应用内建对话式语音体验。 调用 {@code android.app.Activity.isVoiceInteraction()} 方法可确定您的活动是否为响应语音操作而启动。 如果是这样,则您的应用可以使用 {@code android.app.VoiceInteractor} 类请求用户进行语音确认、从选项列表中进行选择以及执行其他操作。 如需了解有关实现语音操作的更多信息,请参阅 语音操作开发者网站。
本预览版提供了一种让用户通过助手程序与应用进行互动的新方式。如需使用此功能,用户必须启用助手以使用当前上下文。 启用后,用户可通过长按主页按钮在任何应用内召唤助手。
您的应用可通过设置 {@link android.view.WindowManager.LayoutParams#FLAG_SECURE} 标志选择不与助手共享当前上下文。除了平台传递给助手的一组标准信息外,您的应用还可利用新增的 {@code android.app.Activity.AssistContent} 类共享其他信息。
如需为助手提供您的应用内的其他上下文,请执行以下步骤:
本预览版针对通知功能引入了下列 API 变更:
本预览版改善了对用户使用蓝牙触控笔进行输入的支持。用户可将兼容的蓝牙触控笔与其手机或平板电脑配对并建立连接。 连接后,来自触摸屏的位置信息将与来自触控笔的压力和按键信息融合,从而实现比单纯使用触摸屏更丰富的表达。 您的应用可以通过在活动中注册新增的 {@code View.onStylusButtonPressListener} 回调和 {@code GestureDetector.OnStylusButtonPressListener} 回调侦听触控笔按键动作并执行辅助操作。
可使用 {@link android.view.MotionEvent} 方法和常量来检测触控笔按键交互:
如果您的应用执行蓝牙低功耗扫描,可以使用新增的 {@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} 方法指定您只希望在下列条件下通知回调:首次找到与设置的 {@link android.bluetooth.le.ScanFilter} 匹配的播发数据包并且该数据包已有一段时间没有出现。 这种扫描方法与旧平台版本中提供的方法相比更加节能。
本预览版在 Nexus 6 和 Nexus 9 设备上添加了对 Hotspot 2.0 第 1 版规范的支持。如需在您的应用中设置 Hotspot 2.0 凭据,请使用新增的 {@link android.net.wifi.WifiEnterpriseConfig} 类方法,如 {@code setPlmn()} 方法和 {@code setRealm()} 方法。 在 {@link android.net.wifi.WifiConfiguration} 对象中,您可以设置 {@link android.net.wifi.WifiConfiguration#FQDN} 字段和 {@code providerFriendlyName} 字段。 新增的 {@code ScanResult.PasspointNetwork} 属性可指示检测到的网络是否为 Hotspot 2.0 接入点。
现在,平台允许应用在兼容硬件上请求将显示分辨率升级到 4K 渲染。 如需查询当前物理分辨率,请使用新增的 {@code android.view.Display.Mode} API。请注意,如果 UI 是以较低逻辑分辨率绘制并通过放大达到更高的物理分辨率,则 {@code Display.Mode.getPhysicalWidth()} 方法返回的物理分辨率可能不同于 {@link android.view.Display#getSize(android.graphics.Point) getSize()} 所报告的逻辑分辨率。
您可以通过设置应用窗口的 {@code WindowManager.LayoutParams.preferredDisplayModeId} 属性请求系统更改应用运行时的物理分辨率。 如果您想切换到 4K 显示分辨率,此功能会很有帮助。 在 4K 显示模式下,UI 仍然以原始分辨率(如 1080p)渲染,通过放大达到 4K,但 {@link android.view.SurfaceView} 对象可能会以原生分辨率显示内容。
对于运行 M 预览版的设备,现在支持在 {@link android.content.res.ColorStateList} 中使用主题属性。 {@link android.content.res.Resources#getColorStateList(int) getColorStateList()} 方法和 {@link android.content.res.Resources#getColor(int) getColor()} 方法已弃用。如果您要调用这些 API,请改为调用新增的 {@code Context.getColorStateList()} 方法或 {@code Context.getColor()} 方法。 还可在 v4 appcompat 库中通过 {@link android.support.v4.content.ContextCompat} 使用这些方法。
本预览版增强了 Android 上的音频处理功能,包括:
本预览版为视频处理 API 添加了新功能,包括:
本预览版提供了下列用于访问相机闪光灯和相机图像再处理的新 API:
如果相机设备带有闪光灯,您可以通过调用 {@code CameraManager.setTorchMode()} 方法,在不打开相机设备的情况下打开或关闭闪光灯的火炬模式。应用对闪光灯或相机设备不享有独占所有权。 每当相机设备不可用,或者开启火炬的其他相机资源不可用时,火炬模式即会被关闭并变为不可用状态。 其他应用也可调用 {@code setTorchMode()} 来关闭火炬模式。 当最后一个开启火炬模式的应用关闭时,火炬模式就会被关闭。
您可以注册一个回调,通过调用 {@code CameraManager.registerTorchCallback()} 方法接收有关火炬模式状态的通知。第一次注册回调时,系统会立即调用它,并返回所有当前已知配备闪光灯的相机设备的火炬模式状态。 如果成功开启或关闭火炬模式,系统会调用 {@code CameraManager.TorchCallback.onTorchModeChanged()} 方法。
{@link android.hardware.camera2 Camera2} API 进行了扩展,以支持 YUV 和专用不透明格式图像再处理。 您的应用通过 {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES} 确定再处理功能是否可用。 如果设备支持再处理,您可以通过调用 {@code CameraDevice.createReprocessableCaptureSession()} 创建一个可再处理的相机捕获会话并创建输入缓冲区再处理请求。
使用 {@code ImageWriter} 类可将输入缓冲区流与相机再处理输入相连。 如需获得空白缓冲区,请遵循以下编程模型:
如果您将 {@code ImageWriter} 对象与 {@code android.graphics.ImageFormat.PRIVATE} 图像一起使用,您的应用并不能直接访问图像数据。 请改为调用 {@code ImageWriter.queueInputImage()} 方法,将 {@code ImageFormat.PRIVATE} 图像直接传递给 {@code ImageWriter},而无需进行任何缓冲区复制。
{@code ImageReader} 类现在支持 {@code android.graphics.ImageFormat.PRIVATE} 格式图像流。 凭借此支持特性,您的应用可使 {@code ImageReader} 输出图像保持为循环图像队列,还可选择一个或多个图像并将其发送给 {@code ImageWriter} 进行相机再处理。
本预览版提供了下列用于 Android for Work 的新 API:
此外,通过对 Google Play 服务设置应用限制,设备所有者可以指定用于 FRP 解锁的备用 Google 帐户,以替代在设备上激活的 Google 帐户。
配置文件所有者或设备所有者可以利用 {@code DevicePolicyManager.setPermissionPolicy()} 设置适用于所有应用全部运行时请求的权限政策,以提示用户照常授予权限,或自动以静默方式授予或拒绝权限。 如果设置后一种政策,则用户将无法修改配置文件所有者或设备所有者在应用权限屏幕的设置内所做的选择。
如需详细了解 M 开发者预览版中的所有 API 变更,请参阅 API 差异报告。