Android 12 为开发者带来了强大的新功能和 API。以下部分可帮助您了解应用功能并开始使用相关 API。
如需新、修改和已移除 API 的详细列表,请阅读 API 差异报告。如需了解新 API 的详细信息,请访问 Android API 参考文档——新 API 会突出显示以便查阅。此外,如需了解平台更改可能影响您应用的方面,请务必查看 Android 12 行为变更,包括针对以 Android 12 为目标的应用的变更和针对所有应用的变更。
用户体验
Material You
Android 12 引入了名为 Material You 的新设计语言,可帮助您构建更具个性化和美观的应用。要将所有最新的 Material Design 3 更新引入您的应用,请尝试使用 Material Design Components 的 Alpha 版本。
小部件改进
Android 12 对现有的小部件 API 进行了改造,以改善平台和启动器中的用户和开发者体验。我们创建了一份指南,帮助您确保您的小部件与 Android 12 兼容,并通过新功能进行更新。
有关详情,请参阅Android 12 小部件改进。
富文本内容插入
Android 12 引入了一个新的统一 API,可让您的应用从任何可用来源(剪贴板、键盘或拖放)接收富媒体内容。
如需了解详情,请参阅接收富媒体内容。
应用启动画面 API
Android 12 为所有应用引入了新的应用启动动画,其中包括从启动点进入应用的动画、显示应用图标的启动画面以及过渡到应用本身的动画。有关详细信息,请参阅启动画面开发者指南。
圆角 API
Android 12 引入了 RoundedCorner
和 WindowInsets.getRoundedCorner(int position)
,它们提供了圆角的半径和中心点。
有关详情,请参阅圆角。
丰富的触觉体验
Android 12 扩展了工具,用于为 UI 事件创建信息丰富的触觉反馈、为游戏创建沉浸式和愉悦的效果,以及为生产力创建注意力触觉。
执行器效果
Android 12 添加了富有表现力的效果,例如低频振动,这些效果利用了最新执行器更宽的频率带宽。游戏开发者现在可以独立访问游戏控制器中的多个不同执行器,以同步传递相同效果或在多个执行器上传递不同的触觉效果。对于开发者,我们建议使用常量和基元作为构建丰富触觉效果的构建块——常量用于增强 UI 事件,触觉合成器用于对基元进行排序以实现更复杂的效果。这些 API 可在 Pixel 4 设备上试用,我们正继续与设备制造商合作伙伴合作,将最新的触觉支持带给生态系统中的用户。
音频耦合触觉效果
Android 12 应用可以使用手机的振动器生成源自音频会话的触觉反馈。这为更沉浸式的游戏和音频体验提供了机会。例如,触觉增强铃声可以帮助识别来电者,或者驾驶游戏可以模拟崎岖地形的感觉。
有关详情,请参阅 HapticGenerator
参考文档。
AppSearch
Android 12 引入了 AppSearch,一个高性能的设备端搜索引擎,作为系统服务。AppSearch 允许应用程序索引结构化数据并利用内置的全文搜索功能对其进行搜索。此外,AppSearch 支持本机搜索功能,例如高效的索引和检索、多语言支持以及相关性排名。

AppSearch 有两种形式:一种是供您的应用程序使用的本地索引,与旧版 Android 兼容;另一种是 Android 12 中为整个系统维护的中央索引。使用中央索引,您的应用程序可以允许其数据通过系统预装的智能组件显示在系统 UI 界面上。具体哪些数据显示在系统 UI 界面上取决于原始设备制造商 (OEM)。此外,您的应用程序可以安全地与其他应用程序共享数据,以允许它们也搜索这些数据。
在开发者指南中详细了解 AppSearch,并开始使用 AppSearch Jetpack 库,该库提供了开发者友好的 API 界面以及注解处理器支持。
游戏模式
游戏模式 API 和游戏模式干预允许您根据用户设置或游戏特定配置,通过优先考虑性能或电池续航时间等特性来优化游戏玩法。
有关详情,请参阅游戏模式。
画中画 (PiP) 建议和改进
Android 12 为 PiP 模式引入了以下改进:
支持新的 PiP 手势
Android 12 现在支持 PiP 窗口的收起和捏合缩放手势。
要收起窗口,用户可以将窗口拖动到左边缘或右边缘。要取消收起窗口,用户可以点击收起窗口的可见部分或将其拖出。
用户现在可以使用捏合缩放来调整 PiP 窗口的大小。
推荐支持流畅 PiP 过渡体验的新功能
Android 12 为全屏和 PiP 窗口之间的动画过渡添加了显著的视觉改进。我们强烈建议您实施所有适用的更改;一旦完成,这些更改将自动扩展到折叠屏和平板电脑等大屏幕,无需任何额外工作。
这些功能如下:
用于使用手势导航更流畅过渡到 PiP 模式的新 API 标志
使用
setAutoEnterEnabled
标志可在手势导航模式下向上滑动到主屏幕时提供更流畅的 PiP 模式过渡。以前,Android 会等待向上滑动到主屏幕动画完成后才淡入 PiP 窗口。-
SourceRectHint
标志现在被重用以实现进入和退出 PiP 模式时更流畅的动画。 -
SeamlessResizeEnabled
标志在 PiP 窗口中调整非视频内容大小时提供了更流畅的交叉淡入动画。以前,在 PiP 窗口中调整非视频内容大小时可能会产生不协调的视觉伪影。
新电话通知允许对来电重要性进行排名
Android 12 为电话添加了新的通知样式 Notification.CallStyle
。使用此模板可让您的应用通过在状态栏中显示一个突出显示的芯片来指示活动通话的重要性,该芯片显示通话时间;用户可以点击此芯片返回到他们的通话。
由于来电和进行中的通话对用户来说最重要,因此这些通知在阴影中获得最高排名。此排名还允许系统将这些优先通话转发到其他设备。
为所有类型的通话实现以下代码。
Kotlin
// Create a new call with the user as caller. val incoming_caller = Person.Builder() .setName("Jane Doe") .setImportant(true) .build()
Java
// Create a new call with the user as caller. Person incoming_caller = new Person.Builder() .setName("Jane Doe") .setImportant(true) .build();
使用 forIncomingCall()
为来电创建通话样式通知。
Kotlin
// Create a call style notification for an incoming call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)) .addPerson(incoming_caller)
Java
// Create a call style notification for an incoming call. Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)) .addPerson(incoming_caller);
使用 forOngoingCall()
为进行中的通话创建通话样式通知。
Kotlin
// Create a call style notification for an ongoing call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forOnGoingCall(caller, hangupIntent)) .addPerson(second_caller)
Java
// Create a call style notification for an ongoing call. Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forOnGoingCall(caller, hangupIntent)) .addPerson(second_caller);
使用 forScreeningCall()
为筛选通话创建通话样式通知。
Kotlin
// Create a call style notification for screening a call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(second_caller)
Java
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(second_caller);
通知支持富图像
在 Android 12 中,您现在可以通过在 MessagingStyle()
和 BigPictureStyle()
通知中提供动画图像来丰富您的应用通知体验。此外,您的应用现在可以允许用户在从通知栏回复消息时发送图像消息。
沉浸模式中手势导航的改进
Android 12 整合了现有行为,让用户在沉浸模式下更容易执行手势导航命令。此外,Android 12 还提供了对粘滞沉浸模式的向后兼容行为。
最近的 URL 共享(仅限 Pixel)
在 Pixel 设备上,用户现在可以直接从“最近的应用”屏幕分享最近查看的网络内容的链接。在应用中访问内容后,用户可以滑动到“最近的应用”屏幕并找到他们查看内容的应用程序,然后点击链接按钮复制或分享 URL。
有关详情,请参阅启用最近的 URL 共享。
安全与隐私
隐私控制面板
在运行 Android 12 或更高版本的受支持设备上,系统设置中会显示“隐私控制面板”屏幕。在此屏幕上,用户可以访问单独的屏幕,显示应用何时访问位置、相机和麦克风信息。每个屏幕都显示了不同应用访问特定类型数据的时间线。图 1 显示了位置信息的数据访问时间线。
您的应用可以为用户提供理由,帮助他们理解您的应用为何访问位置、相机或麦克风信息。此理由可以显示在新的“隐私控制面板”屏幕、您的应用权限屏幕或两者上。
蓝牙权限
Android 12 引入了 BLUETOOTH_SCAN
、BLUETOOTH_ADVERTISE
和 BLUETOOTH_CONNECT
权限。这些权限使以 Android 12 为目标的应用更容易与蓝牙设备交互,特别是对于不需要访问设备位置的应用。
更新应用的蓝牙权限声明
为准备您的设备以 Android 12 或更高版本为目标,请更新您的应用逻辑。请声明一组更现代的蓝牙权限,而不是声明一组旧版蓝牙权限。
权限组查找
在 Android 12 或更高版本上,您可以查询系统如何将平台提供的权限组织成权限组。
- 要确定系统将平台定义的权限放入哪个权限组,请调用
getGroupOfPlatformPermission()
。 - 要确定系统已放入特定权限组的平台定义权限,请调用
getPlatformPermissionsForGroup()
。
隐藏应用浮窗
为了让开发者更好地控制用户与开发者应用交互时所看到的内容,Android 12 引入了隐藏具有 SYSTEM_ALERT_WINDOW
权限的应用所绘制的浮层窗口的功能。
声明 HIDE_OVERLAY_WINDOWS
权限后,应用可以调用 setHideOverlayWindows()
来指示当应用自己的窗口可见时,所有 TYPE_APPLICATION_OVERLAY
类型的窗口都应隐藏。应用在显示敏感屏幕(例如交易确认流程)时可能会选择这样做。
显示 TYPE_APPLICATION_OVERLAY
类型窗口的应用应考虑更适合其用例的替代方案,例如画中画或气泡。
已知签名者权限保护标志
从 Android 12 开始,签名级权限的 knownCerts
属性允许您在声明时引用已知签名证书的摘要。
您的应用可以声明此属性并使用 knownSigner
标志,以允许设备和应用向其他应用授予签名权限,而无需在设备制造和发货时对应用进行签名。
设备属性证明
Android 12 扩展了在生成新密钥时可以验证证明证书中设备属性的应用集。
从 Android 9(API 级别 28)开始,使用 Keymaster 4.0 或更高版本的设备政策所有者 (DPO) 可以验证这些证明证书中的设备属性。从 Android 12 开始,任何以 Android 12(API 级别 31)或更高版本为目标的应用都可以使用 setDevicePropertiesAttestationIncluded()
方法执行此验证。
生成的设备属性包括以下 Build
字段:
品牌
设备
制造商
型号
产品
安全锁屏通知操作
从 Android 12 开始,Notification.Action.Builder
类支持 setAuthenticationRequired()
方法,该方法允许您的应用在调用给定通知操作之前要求设备解锁。此方法有助于为锁定设备上的通知添加额外的安全层。
BiometricPrompt 的可本地化字符串
Android 12 引入了新的 API,可帮助您改善应用的生物识别身份验证用户体验。新的 BiometricManager.Strings
嵌套类包括 getButtonLabel()
、getPromptMessage()
和 getSettingName()
方法,这些方法允许您的应用检索用户可读且本地化的按钮标签、提示消息或应用设置名称。使用这些标签可以创建更精确的面向用户的说明,这些说明特定于所使用的生物识别身份验证方法,例如“使用面部解锁”或“使用您的指纹继续”。
消息应用中的钓鱼检测(仅限 Pixel)

在受支持的 Pixel 设备上,Android 12 对流行消息应用中收到的消息运行钓鱼检测。系统使用设备端机器学习来检测可疑活动。检测到后,系统会在消息应用的 UI 上方显示一个安全浮层以警告用户。例如,钓鱼检测可以警告用户以下潜在风险:
- 可疑请求,例如发送代码、金钱或类似内容
- 不受信任的 URL
- 恶意附件
- 指向恶意应用的链接
除了警告用户外,该浮层还允许用户报告可疑消息,并就系统发出的警告提供反馈。
开发者可以通过在应用清单文件中添加包含字符串 com.google.android.ALLOW_PHISHING_DETECTION
的新元数据标签来选择停用此功能。例如:
<manifest>
<application android:name="com.messagingapp">
<meta-data android:name="com.google.android.ALLOW_PHISHING_DETECTION" android:value="false" />
</application>
</manifest>
媒体
兼容媒体转码
从 Android 12(API 级别 31)开始,系统可以自动将设备上录制的 HEVC(H.265) 和 HDR (HDR10 和 HDR10+) 视频转码为 AVC (H.264),这是一种与标准播放器广泛兼容的格式。这利用了现代编解码器(如果可用),同时又不牺牲与旧版应用的兼容性。
有关详情,请参阅兼容媒体转码。
性能等级
Android 12 引入了一个名为“性能等级”的标准。性能等级指定了超出 Android 基线要求的硬件能力。每个 Android 设备都声明其支持的性能等级。开发者可以在运行时检查设备的性能等级,并提供充分利用设备能力的升级体验。
有关详情,请参阅性能等级。
视频编码改进
Android 12 定义了一组标准密钥,用于控制视频编码的量化参数 (QP) 值,从而允许开发者避免使用供应商特定的代码。
新密钥在 MediaFormat
API 和 NDK Media 库中均可用。
从 Android 12 开始,视频编码器会强制执行最低质量阈值。这可确保用户在编码具有高场景复杂度的视频时不会遇到极低的质量。
音频焦点
从 Android 12(API 级别 31)开始,当一个应用请求音频焦点而另一个应用已拥有焦点并正在播放时,系统会淡出正在播放的应用。
有关详情,请参阅Android 12 及更高版本中的音频焦点。
MediaDrm 更新
为了确定当前 MediaDrm
API 是否需要安全解码器组件,您必须遵循以下步骤:
- 创建
MediaDrm
。 - 打开会话以获取会话 ID。
- 使用会话 ID 创建
MediaCrypto
。 - 调用
MediaCrypto.requiresSecureDecoderComponent(mimeType)
。
使用新方法 requiresSecureDecoder(@NonNull String mime)
和 requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level)
,您可以在创建 MediaDrm
后立即确定此信息。
相机
Camera2 供应商扩展
我们的许多设备制造商合作伙伴都构建了自定义相机扩展功能,例如散景、HDR、夜间模式等,他们希望应用利用这些功能在其设备上创造差异化体验。CameraX 库已支持这些自定义供应商扩展。在 Android 12 中,这些供应商扩展现在直接在平台中公开。
这一新增功能有助于具有复杂 Camera2
实现的应用利用供应商扩展,而无需对旧代码进行重大更改。Camera2 扩展 API 公开了与 CameraX 中完全相同的扩展集,并且这些扩展已在许多不同设备上得到支持,因此您可以无需任何额外配置即可使用它们。
有关详情,请参阅 CameraExtensionCharacteristics
。
四拜耳相机传感器支持
如今,许多 Android 设备都配备了超高分辨率相机传感器,通常采用四拜耳或九拜耳模式,这些传感器在图像质量和低光性能方面提供了极大的灵活性。Android 12 引入了新的平台 API,允许第三方应用充分利用这些多功能传感器。新的 API 支持这些传感器的独特行为,并考虑到它们在全分辨率或“最大分辨率”模式下与“默认”模式下操作时可能支持不同的流配置和组合。
图形和图像
为应用提供直接访问墓碑跟踪的权限
从 Android 12 开始,您可以通过 ApplicationExitInfo.getTraceInputStream()
方法将应用的本机崩溃墓碑作为协议缓冲区访问。协议缓冲区使用此架构序列化。以前,获取此信息的唯一方法是通过 Android Debug Bridge (adb)。
有关详情,请参阅为应用提供直接访问墓碑跟踪的权限
AVIF 图像支持
Android 12 引入了对使用 AV1 图像文件格式 (AVIF) 的图像的支持。AVIF 是一种用于使用 AV1 编码的图像和图像序列的容器格式。AVIF 利用了视频压缩中的帧内编码内容。与 JPEG 等较旧的图像格式相比,这在相同文件大小下显著提高了图像质量。如需深入了解此格式的优点,请参阅 Jake Archibald 的博客文章。
更轻松的模糊、颜色滤镜和其他效果
Android 12 添加了新的 RenderEffect
,可将常见的图形效果(如模糊、颜色滤镜、Android 着色器效果等)应用于 View
和渲染层次结构。效果可以组合为链式效果(由内部和外部效果组成)或混合效果。由于处理能力有限,不同的 Android 设备可能支持也可能不支持此功能。
效果也可以通过调用 View.setRenderEffect(RenderEffect)
应用于 View
的底层 RenderNode
。
要实现 RenderEffect
:
view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))
本机动画图像解码
在 Android 12 中,NDK ImageDecoder
API 已扩展,可以解码使用动画 GIF 和动画 WebP 文件格式的图像的所有帧和时间数据。在 Android 11 中引入时,此 API 仅解码这些格式动画中的第一张图像。
使用 ImageDecoder
而不是第三方库可以进一步减小 APK 大小,并受益于未来与安全和性能相关的更新。
有关 API 的更多详细信息,请参阅API 参考和 GitHub 上的示例。
连接
保持伴侣应用唤醒
为了支持伴侣应用需要保持运行以管理设备的需求,Android 12 引入了执行以下操作的 API:
- 使您能够在伴侣设备在范围内时唤醒应用。
- 保证进程在设备保持在范围内时继续运行。
要使用这些 API,您的设备必须使用伴侣设备管理器连接。有关详情,请参阅 CompanionDeviceManager.startObservingDevicePresence()
和 CompanionDeviceService.onDeviceAppeared()
。
伴侣设备管理器配置文件

Android 12 (API level 31) 及更高版本上的合作伙伴应用在连接到手表时可以使用伴侣设备配置文件。使用配置文件通过将授予设备类型特定权限集捆绑到一个步骤来简化注册过程。
捆绑的权限在设备连接后授予伴侣应用,并且仅在设备关联时持续有效。删除应用或移除关联将移除权限。
有关详情,请参阅 AssociationRequest.Builder.setDeviceProfile()
。
带宽估算改进
在 Android 12 中,getLinkDownstreamBandwidthKbps()
和 getLinkUpstreamBandwidthKbps()
提供的带宽估算功能在 Wi-Fi 和蜂窝连接方面都得到了改进。现在返回的值表示用户在设备上所有应用中,每个运营商或 Wi-Fi SSID、网络类型和信号级别的所有时间加权平均吞吐量。与使用其他吞吐量估算方法相比,这可以返回更准确、更真实的预期吞吐量估算值,在您的应用冷启动时提供估算,并需要更少的周期。
Wi-Fi Aware (NAN) 增强功能
Android 12 为 Wi-Fi Aware 添加了一些增强功能:
- 在运行 Android 12 (API level 31) 及更高版本的设备上,您可以使用
onServiceLost()
回调,在服务停止或超出范围导致应用失去已发现的服务时收到提醒。 - 多个数据路径 (NAN Data Paths) 的设置方式正在变得更高效。早期版本使用 L2 消息传递来交换发起方的对等信息,这引入了延迟。在运行 Android 12 及更高版本的设备上,响应方(服务器)可以配置为接受任何对等方——也就是说,它不需要预先知道发起方信息。这加快了数据路径的启动速度,并仅通过一个网络请求即可实现多个点对点链接。
- 为了防止框架因资源耗尽而拒绝发现或连接请求,在运行 Android 12 及更高版本的设备上,您可以调用
WifiAwareManager.getAvailableAwareResources()
。此方法的返回值可让您获取可用数据路径的数量、可用发布会话的数量以及可用订阅会话的数量。
并发点对点 + 互联网连接
当以 Android 12 (API level 31) 及更高版本为目标的设备在支持硬件的设备上运行时,使用点对点连接在创建与对等设备的连接时不会断开您现有的 Wi-Fi 连接。要检查此功能的支持,请使用 WifiManager.isMultiStaConcurrencySupported()
。
为 NFC 支付启用熄屏功能
在以 Android 12 及更高版本为目标的应用中,您可以通过将 requireDeviceScreenOn
设置为 false
来在设备屏幕关闭时启用 NFC 支付。有关熄屏或锁定屏幕下 NFC 支付的更多信息,请参阅熄屏和锁屏行为。
存储
Android 12 引入了以下存储管理功能:
- 当您的应用检索与给定文档提供程序 URI 等效的媒体 URI 时,媒体存储支持
MediaDocumentsProvider
。 - 录音的目录。
MANAGE_MEDIA
权限,允许应用执行媒体管理操作,而无需为每个操作向用户显示确认对话框。- 同时拥有
MANAGE_EXTERNAL_STORAGE
权限和QUERY_ALL_PACKAGES
权限的应用(例如文件管理应用)可以调用自定义活动来管理另一个应用的存储空间,前提是另一个应用创建了该自定义活动。
核心功能
自动应用更新
Android 12 为使用 PackageInstaller
API 的应用引入了 setRequireUserAction()
方法。此方法允许安装程序应用执行应用更新,而无需用户确认操作。
设备芯片组信息
Android 12 在 android.os.Build
中添加了两个常量,通过 SDK 公开 SoC 芯片组供应商和型号信息。您可以通过分别调用 Build.SOC_MANUFACTURER
和 Build.SOC_MODEL
来检索此信息。
核心 Java API 更新
根据开发者的请求和协作,我们在 Android 12 中添加了以下核心库:
类 | API |
---|---|
java.lang.Deprecated
|
|
java.lang.Byte
|
|
java.lang.Short
|
|
java.lang.Math
|
|
java.lang.StrictMath
|
|
java.util.Set
|
copyOf()
|
java.util.Map
|
copyOf()
|
java.util.List
|
copyOf()
|
java.time.Duration
|
|
java.time.LocalTime
|