功能和 API 概览

Android 11 为开发者引入了许多出色的新功能和 API。以下部分可帮助您了解应用功能并开始使用相关的 API。

如需详细了解新增、修改和移除的 API,请参阅 API 差异报告。如需详细了解新 API,请访问 Android API 参考文档(新 API 会高亮显示)。此外,要了解平台变更可能对您的应用产生影响的方面,请务必查看 Android 11 的行为变更(适用于以 Android R 为目标平台的应用适用于所有应用),以及隐私权变更

新体验

设备控制

Android 11 包含一个新的 ControlsProviderService API,您可以使用它来公开连接的外部设备的控制项。这些控制项显示在 Android 电源菜单中的 设备控制 下。如需了解详情,请参阅控制外部设备

媒体控制

Android 11 更新了媒体控制的显示方式。媒体控制项显示在快速设置附近。来自多个应用的会话排列在一个可滑动的轮播界面中,其中包括手机上本地播放的流、远程流(例如在外部设备上检测到的流或投射会话),以及按上次播放顺序排列的先前可恢复的会话。

用户可以从轮播界面重新启动以前的会话,而无需启动应用。当播放开始时,用户以通常的方式与媒体控制项互动。

如需了解详情,请参阅媒体控制

屏幕

更好地支持瀑布屏

Android 11 提供了多个 API 来支持瀑布屏,即环绕设备边缘的显示屏。这些显示屏被视为异形屏的一种变体。现有的 DisplayCutout.getSafeInset…() 方法现在返回安全内边距,以避免瀑布区和刘海屏区域。要在瀑布区渲染您的应用内容,请执行以下操作:

铰链角度传感器和折叠屏设备

Android 11 允许在具有基于铰链的屏幕配置的设备上运行的应用,通过提供一个带有 TYPE_HINGE_ANGLE 的新传感器,以及一个新的 SensorEvent 来确定铰链的角度,该传感器可以监测铰链角度并提供设备两个整体部件之间的度数测量值。您可以使用这些原始测量值,在用户操作设备时执行精细动画。

请参阅折叠屏设备

对话

对话改进

Android 11 对对话的处理方式进行了一些改进。对话是两个人或多人之间的实时双向通信。这些对话具有特殊的突出地位,用户可以通过多种新选项与它们互动。

如需详细了解对话以及您的应用如何支持对话,请参阅人物与对话

聊天气泡

气泡现在可供开发者使用,以帮助在整个系统中显示对话。气泡是 Android 10 中的一个实验性功能,通过开发者选项启用;在 Android 11 中,这不再是必需的。

如果应用以 Android 11 (API 级别 30) 或更高版本为目标平台,则除非其满足新的对话要求,否则其通知不会显示为气泡。具体来说,通知必须与快捷方式关联。

在 Android 11 之前,如果您希望通知显示为气泡,您需要明确指定通知始终以文档 UI 模式启动。从 Android 11 开始,您不再需要明确进行该设置;如果通知显示为气泡,平台会自动将通知设置为始终以文档 UI 模式启动。

气泡性能得到了一些改进,用户在启用和禁用每个应用的气泡方面拥有更大的灵活性。对于实现实验性支持的开发者,Android 11 中的 API 有一些变化:

5G 视觉指示器

有关在用户设备上显示 5G 指示器的信息,请参阅告知用户何时处于 5G 网络

隐私权

Android 11 引入了大量变更和限制,以增强用户隐私。如需了解详情,请参阅隐私权页面。

安全性

生物识别身份验证更新

为帮助您控制应用数据的安全级别,Android 11 对生物识别身份验证进行了多项改进。这些变更也出现在 Jetpack 生物识别库中。

身份验证类型

Android 11 引入了 BiometricManager.Authenticators 接口,您可以使用它来声明您的应用支持的身份验证类型

确定使用了哪种身份验证类型

用户身份验证后,您可以通过调用 getAuthenticationType() 来检查用户是使用设备凭据还是生物识别凭据进行身份验证的。

对按次使用密钥的额外支持

Android 11 为使用按次使用密钥进行身份验证提供了更多支持。

已弃用的方法

Android 11 弃用了以下方法:

  • setDeviceCredentialAllowed() 方法。
  • setUserAuthenticationValidityDurationSeconds() 方法。
  • 不带参数的 canAuthenticate() 重载版本。

安全共享大型数据集

在某些情况下,例如涉及机器学习或媒体播放的情况,您的应用可能希望使用与另一个应用相同的海量数据集。在以前的 Android 版本中,您的应用和另一个应用都需要分别下载同一数据集的副本。

为帮助减少网络和磁盘上的数据冗余,Android 11 允许使用共享数据 Blob 在设备上缓存这些大型数据集。如需详细了解共享数据集,请参阅共享大型数据集的深入指南

OTA 重启后无需用户凭据即可执行基于文件的加密

设备完成 OTA 更新并重新启动后,放置在凭据保护存储中的凭据加密密钥 (CE) 立即可用于基于文件的加密 (FBE) 操作。这意味着,在 OTA 更新后,您的应用可以在用户输入其 PIN 码、图案或密码之前,恢复需要 CE 密钥的操作。

性能和质量

无线调试

Android 11 支持通过 Android 调试桥 (adb) 从您的工作站无线部署和调试您的应用。例如,您可以将可调试的应用部署到多个远程设备,而无需通过 USB 物理连接您的设备并处理常见的 USB 连接问题,例如驱动程序安装。如需了解详情,请参阅在硬件设备上运行应用

ADB 增量 APK 安装

在设备上安装大型 (2GB+) APK 可能需要很长时间,即使只对应用进行了微小的更改也是如此。ADB(Android Debug Bridge)增量 APK 安装通过安装足够的 APK 以启动应用,同时在后台流式传输剩余数据来加速此过程。adb install 将自动使用此功能,前提是设备支持此功能并且您已安装最新的 SDK 平台工具。如果不支持,则会静默使用默认安装方法。

使用以下 adb 命令使用此功能。如果设备不支持增量安装,则该命令将失败并打印详细说明。

adb install --incremental

在运行 ADB 增量 APK 安装之前,您必须对 APK 进行签名并创建 APK 签名方案 v4 文件。v4 签名文件必须与 APK 放在一起,此功能才能正常工作。

使用原生内存分配器进行错误检测

GWP-ASan 是一项原生内存分配器功能,可帮助查找释放后使用和堆缓冲区溢出错误。您可以全局启用此功能,或针对应用的特定子进程启用此功能。如需了解详情,请参阅 GWP-Asan 指南

神经网络 API 1.3

Android 11 扩展并改进了 神经网络 API (NNAPI)

新操作

NNAPI 1.3 引入了一种新的操作数类型 TENSOR_QUANT8_ASYMM_SIGNED,以支持 TensorFlow Lite 的新量化方案

此外,NNAPI 1.3 引入了以下新操作:

  • QUANTIZED_LSTM
  • IF
  • WHILE
  • ELU
  • HARD_SWISH
  • FILL
  • RANK

新的机器学习控制

NNAPI 1.3 引入了新的控制功能,可帮助机器学习平稳运行:

NDK 热能 API

当设备过热时,它们可能会限制 CPU 和/或 GPU,这可能会以意想不到的方式影响应用。包含复杂图形、大量计算或持续网络活动的应用或游戏更有可能遇到问题。

使用 Android 11 中的 NDK 热能 API 来监控设备上的温度变化,然后采取措施以保持较低的功耗和较凉爽的设备温度。此 API 类似于 Java 热能 API;您可以使用它来接收任何热状态变化的通知或直接查询当前状态。

文本和输入

改进的 IME 过渡

Android 11 引入了新的 API,以改进输入法编辑器(IME,例如屏幕键盘)的过渡。这些 API 使您可以更轻松地使应用内容与 IME 的显示和隐藏以及状态栏和导航栏等其他元素同步调整。

要在任何 EditText 获得焦点时显示 IME,请调用 view.getInsetsController().show(Type.ime())。(您可以在与获得焦点的 EditText 处于同一层次结构中的任何视图上调用此方法,而不必专门在 EditText 上调用它。)要隐藏 IME,请调用 view.getInsetsController().hide(Type.ime())。您可以通过调用 view.getRootWindowInsets().isVisible(Type.ime()) 来检查 IME 当前是否可见。

要使您的应用视图与 IME 的显示和隐藏同步,请通过将 WindowInsetsAnimation.Callback 提供给 View.setWindowInsetsAnimationCallback() 来设置视图上的监听器。(您可以在任何视图上设置此监听器,而不必是 EditText。)IME 会调用您的监听器的 onPrepare() 方法,然后在过渡开始时调用 onStart()。然后,它会在过渡的每次进展中调用 onProgress()。当过渡完成时,IME 会调用 onEnd()。在过渡的任何时刻,您都可以通过调用 WindowInsetsAnimation.getFraction() 来了解过渡的进展程度。

有关如何使用这些 API 的示例,请参阅新的 WindowInsetsAnimation 代码示例。

控制 IME 动画

您还可以控制 IME 动画,或导航栏等其他系统栏的动画。为此,首先调用 setOnApplyWindowInsetsListener() 为窗口内边距变化设置新的监听器:

Kotlin

rootView.setOnApplyWindowInsetsListener { rootView, windowInsets ->
    val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime())
    rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, 
                          barsIme.bottom)

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
    WindowInsets.CONSUMED
}

Java

mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
   @Override
   public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {

       Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime());
       mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right,
                             barsIme.bottom);

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
       return WindowInsets.CONSUMED;
   }
});

要移动 IME 或其他系统栏,请调用控制器的 controlWindowInsetsAnimation() 方法:

Kotlin

view.windowInsetsController.controlWindowInsetsAnimation(
       Type.ime(),
       1000,
       LinearInterpolator(),
       cancellationSignal,
       object : WindowInsetsAnimationControlListener() {
           fun onReady(controller: WindowInsetsAnimationController,
                         types: Int) {
               // update IME inset
             controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */)
           }
       }
);

Java

mRoot.getWindowInsetsController().controlWindowInsetsAnimation(
       Type.ime(), 1000, new LinearInterpolator(), cancellationSignal,
       new WindowInsetsAnimationControlListener() {
           @Override
           public void onReady(
                   @NonNull WindowInsetsAnimationController controller,
                   int types
                   ) {
                   // update IME inset
                   controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */);
           }

           @Override
           public void onCancelled() {}
       });

ICU 库更新

Android 11 将 android.icu 软件包更新为使用 ICU 库的第 66 版(Android 10 中为第 63 版)。新库版本包含更新的 CLDR 区域设置数据以及 Android 中国际化支持的多项增强功能。

新库版本中的显著变更包括:

  • 许多格式化 API 现在支持一种新的返回对象类型,该类型扩展了 FormattedValue
  • LocaleMatcher API 通过构建器类、对 java.util.Locale 类型的支持以及一个包含有关匹配项的额外数据的结果类得到了增强。
  • 现在支持 Unicode 13。

媒体

分配 MediaCodec 缓冲区

Android 11 包含一个新的 MediaCodec API,它使应用在分配输入和输出缓冲区时拥有更多控制权。这使您的应用能够更高效地管理内存。

新类
新方法

此外,MediaCodec.Callback() 中两个方法的行为已更改:

onInputBufferAvailable()
如果配置为使用 Block Model API,应用应使用带索引的 MediaCodec.getQueueRequest,并将 LinearBlock/HardwareBuffer 附加到插槽,而不是使用索引调用 MediaCodec.getInputBuffer()MediaCodec.queueInputBuffer()
onOutputBufferAvailable()
应用可以使用带索引的 MediaCodec.getOutputFrame() 来获取包含更多信息和 LinearBlock/HardwareBuffer 缓冲区的 OutputFrame 对象,而不是使用索引调用 MediaCodec.getOutputBuffer()

MediaCodec 中的低延迟解码

Android 11 增强了 MediaCodec,以支持游戏和其他实时应用的低延迟解码。您可以通过将 FEATURE_LowLatency 传递给 MediaCodecInfo.CodecCapabilities.isFeatureSupported() 来检查编解码器是否支持低延迟解码。

要开启或关闭低延迟解码,请执行以下任一操作:

新的 AAudio 函数 AAudioStream_release()

函数 AAudioStream_close() 同时释放并关闭音频流。这可能很危险。如果另一个进程在流关闭后尝试访问该流,则该进程将崩溃。

新的函数 AAudioStream_release() 释放流,但不关闭它。这会释放其资源并使流处于已知状态。该对象将一直存在,直到您调用 AAudioStream_close()

MediaParser API

MediaParser 是一个用于媒体提取的新的底层 API。它比 MediaExtractor 更灵活,并提供对媒体提取功能的额外控制。

从 USB 设备捕获音频

当没有 RECORD_AUDIO 权限的应用使用 UsbManager 请求直接访问具有音频捕获能力(例如 USB 耳机)的 USB 音频设备时,会出现一个新的警告消息,要求用户确认使用设备的权限。系统会忽略任何“始终使用”选项,因此用户每次应用请求访问时都必须确认警告并授予权限。

为避免此行为,您的应用应请求 RECORD_AUDIO 权限。

并发麦克风访问

Android 11 向 AudioRecordMediaRecorderAAudioStream API 添加了新方法。这些方法启用和禁用无论所选用例如何都可并发捕获的功能。请参阅共享音频输入

输出切换器

Android 11 为使用投射和媒体路由 API 的应用实现了新的行为。

除了从应用内访问投射选项外,切换选项也出现在系统媒体播放器中。这有助于用户在更改观看和收听场景(例如在厨房观看视频与在手机上观看视频,或在家中或汽车中收听音频)时,在设备之间无缝切换。请参阅输出切换器

连接

Wi-Fi Passpoint 增强功能

有关 Android 11 中添加的 Passpoint 功能的信息,请参阅Passpoint

Wi-Fi 建议 API 已扩展

Android 11 扩展了 Wi-Fi 建议 API,以增强您的应用的网络管理功能,包括以下内容:

  • 连接管理应用可以通过允许断开连接请求来管理自己的网络。
  • Passpoint 网络已集成到建议 API 中,可以向用户推荐。
  • 分析 API 使您能够获取有关网络质量的信息。

CallScreeningService 更新

从 Android 11 开始,CallScreeningService 可以请求有关呼入电话的 STIR/SHAKEN 验证状态 (verstat) 信息。此信息作为呼入电话的呼叫详细信息的一部分提供。

如果 CallScreeningService 持有 READ_CONTACTS 权限,则当有来自用户联系人中某个号码的呼入电话或呼出电话时,应用会收到通知。

如需了解详情,请参阅防止来电显示欺骗

开放移动 API 更新

有关 Android 11 及更高版本上的 OMAPI 支持的信息,请参阅开放移动 API 读取器支持

高性能 VPN

以 API 级别 30 及更高版本为目标或在 API 级别 29 及更高版本上启动的设备上运行的应用,可以将 IKEv2/IPsec 应用于用户配置和基于应用的 VPN。

VPN 在操作系统中原生运行,从而简化了在应用中建立 IKEv2/IPsec VPN 连接所需的代码。

按进程的网络访问控制

有关按进程启用网络访问的信息,请参阅管理网络使用情况

允许安装具有相同 FQDN 的多个 Passpoint 配置

从 Android 11 开始,您可以使用 PasspointConfiguration.getUniqueId() 来获取 PasspointConfiguration 对象的唯一标识符,这使得您的应用用户可以安装具有相同完全限定域名 (FQDN) 的多个配置文件。

当运营商在其网络上部署不止一个移动国家代码 (MCC) 和移动网络代码 (MNC) 组合,但只有一个 FQDN 时,此功能非常有用。在 Android 11 及更高版本上,可以安装具有相同 FQDN 的多个配置文件,这些配置文件将在用户安装带有 MCC 或 MNC 的 SIM 卡时与网络匹配为家庭提供商。

GNSS 天线支持

Android 11 引入了 GnssAntennaInfo 类,这使得您的应用能够更好地利用全球导航卫星系统 (GNSS) 提供的厘米级定位精度。

天线校准信息指南中了解更多信息。

图形

NDK 图像解码器

NDK ImageDecoder API 为 Android C/C++ 应用提供了直接解码图像的标准 API。应用开发者不再需要通过 JNI 使用框架 API 或捆绑第三方图像解码库。如需了解详情,请参阅图像解码器开发者指南

帧速率 API

Android 11 提供了一个 API,使应用能够向系统告知其预期的帧速率,以减少支持多个刷新率的设备上的抖动。有关如何使用此 API 的信息,请参阅帧速率指南

请求和检查低延迟支持

某些显示器可以执行图形后处理,例如某些外部显示器和电视。这种后处理可以改善图形,但会增加延迟。支持 HDMI 2.1 的新型显示器具有自动低延迟模式ALLM,也称为游戏模式),它通过关闭此后处理来最大限度地减少延迟。有关 ALLM 的更多详细信息,请参阅HDMI 2.1 规范

如果可用,窗口可以请求使用自动低延迟模式。ALLM 对于游戏和视频会议等应用特别有用,在这些应用中,低延迟比拥有最佳图形更重要。

要开启或关闭最小后处理,请调用 Window.setPreferMinimalPostProcessing(),或将窗口的 preferMinimalPostProcessing 属性设置为 true。并非所有显示器都支持最小后处理;要了解特定显示器是否支持,请调用新方法 Display.isMinimalPostProcessingSupported()

高性能图形调试层注入

应用程序现在可以将外部图形层(GLESVulkan)加载到原生应用程序代码中,以提供与可调试应用相同的功能,但不会产生性能开销。此功能在您使用 GAPID 等工具分析应用程序时尤为重要。要分析您的应用,请在应用清单文件中包含以下 meta-data 元素,而不是使应用程序可调试:

<application ... >
    <meta-data android:name="com.android.graphics.injectLayers.enable"
                  android:value="true" />
</application>

图像和相机

在主动捕获期间静音通知声音和振动

从 Android 11 开始,当主动使用相机时,您的应用可以使用 setCameraAudioRestriction() 仅静音振动、同时静音声音和振动,或者都不静音。

Android 模拟器中扩展的相机支持

有关从 Android 11 开始模拟器中相机扩展支持的信息,请参阅相机支持

支持并发使用多个相机

Android 11 添加了 API,用于查询同时使用多个相机(包括前置和后置相机)的支持。

要检查您的应用正在运行的设备上是否支持,请使用以下方法:

更好地支持多帧 HEIF 图像

从 Android 11 开始,如果您调用 ImageDecoder.decodeDrawable() 并传入包含帧序列(例如动画或连拍照片)的 HEIF 图像,则该方法会返回一个包含整个图像序列的 AnimatedImageDrawable。在较早的 Android 版本上,该方法仅返回单个帧的 BitmapDrawable

如果 HEIF 图形包含多个不连续的帧,您可以通过调用 MediaMetadataRetriever.getImageAtIndex() 来检索单个帧。

无障碍功能

无障碍服务开发者更新

如果您创建自定义无障碍服务,您可以在 Android 11 中使用以下功能:

  • 无障碍服务的面向用户说明现在除了纯文本外,还允许使用 HTML 和图像。这种灵活性使得向最终用户解释您的服务做什么以及它如何帮助他们变得更容易。
  • 要处理比 contentDescription 更具语义意义的 UI 元素状态描述,请调用 getStateDescription() 方法。
  • 要请求触摸事件绕过系统的触摸探测器,请调用 setTouchExplorationPassthroughRegion()。同样,要请求手势绕过系统的手势检测器,请调用 setGestureDetectionPassthroughRegion()
  • 您可以请求 IME 操作,例如“enter”和“next”,以及未启用 FLAG_SECURE 标志的窗口的屏幕截图。

其他功能

应用进程退出原因

Android 11 引入了 ActivityManager.getHistoricalProcessExitReasons() 方法,该方法报告任何最近进程终止的原因。应用可以使用此方法收集崩溃诊断信息,例如进程终止是否由于 ANR、内存问题或其他原因。此外,您可以使用新的 setProcessStateSummary() 方法存储自定义状态信息以供后续分析。

getHistoricalProcessExitReasons() 方法返回 ApplicationExitInfo 类的实例,该实例包含与应用进程终止相关的信息。通过在此类的实例上调用 getReason(),您可以确定您的应用进程被终止的原因。例如,返回值为 REASON_CRASH 表示您的应用中发生了未处理的异常。如果您的应用需要确保退出事件的唯一性,它可以维护一个应用特定的标识符,例如基于 getTimestamp() 方法时间戳的哈希值。

其他资源

如需了解更多信息,请阅读 Medium 上关于使应用更私密和稳定的新 Android 11 工具的文章。

资源加载器

Android 11 引入了一个新的 API,允许应用动态扩展资源搜索和加载方式。新的 API 类 ResourcesLoaderResourcesProvider 主要负责提供新功能。它们共同提供了提供额外资源和资产,或修改现有资源和资产值的能力。

ResourcesLoader 对象是容器,它向应用的 Resources 实例提供 ResourcesProvider 对象。反过来,ResourcesProvider 对象提供从 APK 和资源表中加载资源数据的方法。

此 API 的一个主要用例是自定义资产加载。您可以使用 loadFromDirectory() 创建一个 ResourcesProvider,它会重定向基于文件的资源和资产的解析,使其搜索特定目录而不是应用程序 APK。您可以通过 AssetManager API 类中的 open() 系列方法访问这些资产,就像 APK 中捆绑的资产一样。

APK 签名方案 v4

Android 11 添加了对 APK 签名方案 v4 的支持。此方案会在单独的文件(apk-name.apk.idsig)中生成一种新类型的签名,但除此之外与 v2 和 v3 相似。APK 不会发生任何变化。此方案支持 ADB 增量 APK 安装,从而加快了 APK 安装速度。

动态 intent 过滤器

为了接收 intent,应用必须通过在应用清单中定义 intent 过滤器来声明其能够接收的数据类型。在 Android 10 及更低版本中,应用无法在运行时更改其 intent 过滤器。这对虚拟化应用(例如虚拟机和远程桌面)来说是一个问题,因为它们无法准确知道用户将在其中安装哪些软件。

Android 11 引入了 MIME 组,这是一个新的清单元素,允许应用在 intent 过滤器中声明一组动态 MIME 类型,并在运行时以编程方式对其进行修改。要使用 MIME 组,请在您的应用清单中包含一个带有新 android:mimeGroup 属性的数据元素:

<intent-filter>
  <action android:name="android.intent.action.SEND"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeGroup="myMimeGroup"/>
</intent-filter>

android:mimeGroup 属性的值是一个任意字符串 ID,用于在运行时标识 MIME 组。您可以通过将其 ID 传递给 PackageManager API 类中的以下新方法来访问和更新 MIME 组的内容:

当您以编程方式将 MIME 类型添加到 MIME 组时,它的功能与在清单中明确声明的静态 MIME 类型完全相同。

自动填充增强功能

Android 11 引入了对自动填充服务的改进。

AssistStructure.ViewNode 中的提示标识符

自动填充服务根据视图属性计算视图的签名哈希通常很有用。视图提示是一个特别适合在计算签名哈希时包含的属性,但提示字符串可能会随手机的区域设置而变化。为解决此问题,Android 11 扩展了 AssistStructure.ViewNode,添加了新的 getHintIdEntry() 方法,该方法返回视图提示文本的资源标识符。此方法提供了一个与区域设置无关的值,您可以使用它来计算签名哈希。

数据集显示事件

为帮助自动填充服务改进其建议,Android 11 提供了一种方法来识别自动填充服务呈现了数据集但用户未选择其中任何一个的情况。在 Android 11 中,FillEventHistory 报告了一种新的 TYPE_DATASETS_SHOWN 事件类型。FillEventHistory 会在自动填充服务向用户呈现一个或多个数据集时记录此类型的事件。自动填充服务可以结合现有的 TYPE_DATASET_SELECTED 事件来使用这些事件,以确定用户是否选择了任何提供的自动填充选项。

IME 集成

键盘和其他 IME 现在可以在建议条或类似界面中以内联方式显示自动填充建议,而不是在下拉菜单中显示。为了保护密码和信用卡号等敏感信息,建议会显示给用户,但在用户选择之前,IME 并不知道这些信息。有关 IME 和密码管理器如何支持此功能的信息,请参阅将自动填充与键盘集成

与内容捕获服务共享数据

从 Android 11 开始,您的应用可以与设备的內容捕获服务共享数据。此功能使设备更容易提供上下文智能,例如显示用户环境中当前正在播放的歌曲名称。

要使您的应用数据可用于内容捕获服务,请在 ContentCaptureManager 实例上调用 shareData() 方法。如果系统接受数据共享请求,您的应用将收到一个只写文件描述符,以与内容捕获服务共享。