Android 13 应用兼容性适配指导
简介
根据谷歌的时间表,Android 13将于2022年第三季度发布。在第三季度最终发布之前,将有2个开发者预览和4个Beta。由于Android 12L的发布带有32级框架API,Android 13将与33级框架API一起发布。目前应用验证需要设置SDK为Tiramisu:我们会在后续的发布中和大家分享更多的13带来的特性解读。请阅读此文
Google 版本发布时间表
Android 13 开发者网站
目录
1、兼容性调试工具
2、安全与隐私相关
3、系统优化
4、新功能&API
兼容性调试工具
Android 11开始引入了新的工具,可针对Android新平台中的行为变更进行测试和调试。这些工具是兼容性框架的一部分,该框架使得开发者可通过开发者选项或adb命令单独打开和关闭各项变更。藉此,可在最新android预览版中测试我们的app受到新平台及target api调整的影响,完成app对新平台的兼容适配。
使用开发者选项启用或停用变更
您可以使用开发者选项启用或停用变更。如需找到开发者选项,请按以下步骤操作:
如果开发者选项尚未启用,请启用开发者选项。
打开设备的“设置”应用,导航到系统 > 开发者选项 > 应用兼容性变更。
从列表中选择您的应用。
在变更列表中,找到想要开启或关闭的变更,然后点按相应的开关。
使用adb命令打开或关闭变更
请运行以下相应的命令:
adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
您需要传递 CHANGE_ID(例如 119147584)或 CHANGE_NAME(例如 CALLBACK_ON_CLEAR_CHANGE)以及应用的 PACKAGE_NAME。
您也可以使用以下命令将变更重置回默认状态,移除您使用 adb 或开发者选项设置的任何替换状态:
adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
切换变更的启用/停用状态的限制
每当使用开发者选项或adb命令切换应用变更时,应用都会被杀死,以确保覆盖立即生效。
由于切换变更的开启或关闭可能导致应用崩溃或禁用重要的安全变更,为防止恶意使用兼容性框架,在何时切换变更会存在一些限制。是否可以切换变更,取决于变更的类型,应用是否可调试(app:debuggable)以及设备上运行的版本类型。
下表是限制情况:
具体说明及使用方法见:
[developer.andro id.google.cn/guide/app-compatibility/test-debug](developer.andro id.google.cn/guide/app-compatibility/test-debug)
Android 13 新增变更
column1 | 变更 ID | 内容 |
---|---|---|
DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED | 161145287 | 现在,对于以 Android 13 及更高版本为目标平台的应用,在代码中为不受保护的广播注册接收器时,需要显式设置 Context.RECEIVER_EXPORTED 或 Context.RECEIVER_NOT_EXPORTED。 |
DEFER_BOOT_COMPLETED_BROADCAST_CHANGE_ID | 203704822 | 对于以 Android 13 及更高版本为目标平台的应用,请将 LOCKED_BOOT_COMPLETED 和 BOOT_COMPLETED 广播推迟到 UID 中的任何进程首次启动时。 |
NOTIFICATION_LOG_ASSISTANT_CANCEL | 195579280 | 对于以 Android 13 及更高版本为目标平台的应用,会使监听器能够理解助理为取消通知提供的更具体的原因,而不是使用更通用的 REASON_LISTENER_CANCEL。 |
NOTIFICATION_PERM_CHANGE_ID | 194833441 | 对于以 Android 13 及更高版本为目标平台的应用,会启用与运行时权限或通知相关的行为变更。 |
SUPPORT_DEREGISTERING_LOSING_PDN_STATE | 201522903 | 对于以 Android 13 及更高版本为目标平台的应用,支持 API 上的 DEREGISTERING_REASON_LOSING_PDN 状态,例如 DelegateRegistrationState#addDeregisteringFeatureTag 和 DelegateRegistrationState#getDeregisteringFeatureTags。 |
SUPPORT_PUBLISHING_STATE | 202894742 | 对于以 Android 13 及更高版本为目标平台的应用,支持 API 上的发布状态,例如 RcsUceAdapter#PUBLISH_STATE_PUBLISHINGsupport。 |
SUPPORT_REGISTERING_DELEGATE_STATE | 205194548 | 对于以 Android 13 及更高版本为目标平台的应用,支持 API 上的 REGISTERING 状态,例如 DelegateRegistrationState#addRegisteringFeatureTags 和 DelegateRegistrationState#getRegisteringFeatureTagssupport。 |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | 如果同时还启用了 OVERRIDE_MIN_ASPECT_RATIO,则为软件包启用此变更便会限制有以下作用的任何其他变更:强制将相应 activity 的最小宽高比设为某个值(例如 OVERRIDE_MIN_ASPECT_RATIO_LARGE 和 OVERRIDE_MIN_ASPECT_RATIO_MEDIUM),而让这些变更仅作用于还包含纵向屏幕方向的 activity。 |
详细了解Android具体变更:
developer.android.google.cn/about/versi…
安全与隐私相关
Android 13 在安全与隐私方面做了很大努力。对三方应用有很大的影响,需要各应用去主动适配。
发送通知权限
大多数应用程序利用通知发布有用的警报和提醒,但一些应用程序滥用通知发送未经同意的广告等。Android确实允许用户通过设置中的界面关闭每个应用程序和每个频道的通知,但是这种方法存在多个问题。
在Android R上,应用自身是无法修改应用级别的通知权限的,甚至应用本身都无法知道自身有没有发送通知的权限。在Android 13中,谷歌增加了通知的运行时权限。为了不干扰用户和开发者,Android 13中的通知访问会根据正在运行的应用程序的目标API级别进行不同的处理。然而,不管应用程序的目标API级别如何,Android 13都会提示用户授予应用程序发送通知的权限。
4.1.1 对用户影响
在Android 13的机器上对用户来说应用程序均会有提示,新通知权限的权限对话框的结构如下图案例;
如果用户
1)选择“允许”,然后应用程序可以通过任何渠道发送通知,并发布与前台服务相关的通知。
2)选择“不允许”,则应用程序无法通过任何渠道发送通知,只有少数特定规则除外。
3)不去选择,则应用程序只能在系统有临时授权的情况下发送通知。
系统根据应用程序的目标API级别处理通知访问:
对新安装的应用,程序的目标API不同表现为:
1)以 Android 13 为目标平台;应用程序需要在Manifest中声明 android.permission.POST_NOTIFICATIONS 权限。此权限的级别为“dangerous”,因此应用程序需要向用户显示运行时提示才能被授予权限。未被授予权限的程序包的通知将被系统自动删除。
2)如果您的应用以 12L(API 级别 32)或更低版本为目标平台;当应用程序创建其第一个通知渠道时,系统将显示权限对话框。
如果现有应用更新,程序的目标API级别为:
1)以 Android 13 为目标平台,系统临时授予应用发送通知的权限,直到应用中的activity首次启动。应用程序必须有一个现有的通知通道,且其通知不得被用户明确禁用。
2)如果您的应用以 12L 或更低版本为目标平台,系统临时授予应用发送通知的权限,直到用户在权限对话框中明确选择一个选项。
开发者适配需知
应用以 Android 13 或更高版本为目标平台,需要在应用程序manifest文件中,显示声明的权限,并在合适时机触发权限提示;如以下代码段中:
<manifest ...>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application ...>
...
</application>
</manifest>
开发者最佳适配案例
developer.android.google.cn/about/versi…
读取媒体文件权限
对于目标版本为Android 13,细化READ_EXTERNAL_STORAGE权限,使用READ_MEDIA_IMAGE、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO替代READ_EXTERNAL_STORAGE;如上图申请READ_MEDIA_AUDIO的权限弹框。
Type of media | Permission to request |
---|---|
Images and photos | READ_MEDIA_IMAGES |
Videos | READ_MEDIA_VIDEO |
Audio files | READ_MEDIA_AUDIO |
对用户的影响
如应用程序目标版本为Android 13及以上,适配了此特性,运行时用户感知不大;如果过没有适配则会出现异常;
开发者适配需知
以Android 13 及以上为目标平台,需要申请如下权限.要保持与旧版本Android的兼容性,请把READ_EXTERNAL_STORAGE的maxSdkVersion设为32。
<manifest ...>
<!-- Required only if your app targets Android 13. -->
<!-- Declare one or more the following permissions only if your app needs
to access data that's protected by them. -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<!-- Required to maintain app compatibility. -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<application ...>
...
</application>
</manifest>
附近的WIFI设备权限
由于可以通过跟踪附近的Wi-Fi AP和蓝牙设备来推断设备的位置,谷歌决定禁止应用程序访问蓝牙或Wi-Fi扫描结果,除非这类应用需要声明 ACCESS_FINE_LOCATION 权限。
在Android 13中,Google将Wi-Fi扫描与位置分离。Android 13 为管理设备与周围 Wi-Fi 热点连接的应用添加 NEARBY_WIFI_DEVICES运行时权限 (属于 NEARBY_DEVICES 权限组)。调用许多常用 Wi-Fi API 的应用都会需要这个权限,从而在不需要ACCESS_FINE_LOCATION权限 的情况下,更轻松地说明应用为何访问附近的 Wi-Fi 设备。此前,对于仅需要连接 Wi-Fi 设备,但实际上并不需要了解设备位置的应用来说,以 Android 13 为目标平台的应用现在可以通过 “neverForLocation” 属性来完善申请 NEARBY_WIFI_DEVICES 权限,这将有助于促进应用设计的隐私性和友好性,同时减少开发者们面临的阻碍。
对用户的影响
以 Android 13 为目标平台的应用程序,访问附近的 WI-FI 设备。除特例API需要申请ACCESS_FINE_LOCATION外,其他需要申请android.permission.NEARBY_WIFI_DEVICES运行时权限;
以不同Android为目标平台的差异如下图1.图2
图1:以 12L 或更低版本为目标平台的应用是否可以获取 Wi-Fi 信息的流程图。
图2:以 Android 13 或更高版本为目标平台的应用是否可以获取 Wi-Fi 信息的流程图。
对于用户来说,如果应用没有适配且对调用API没有保护。会出现应用报错或功能异常等现象;
对开发者的影响
1、开发需要区分不同api对应的权限;
需要新权限(NEARBY_WIFI_DEVICES)的 API:
1)WifiManager:startLocalOnlyHotspot()
2)WifiAwareManager:attach()
3)WifiAwareSession:publish()、subscribe()
4)WifiP2pManager:addLocalService()、connect()、createGroup()、discoverPeers()、discoverServices()、requestDeviceInfo()、requestGroupInfo()、requestPeers()
5)WifiRttManager:startRanging()
仍需要位置信息权限(ACCESS_FINE_LOCATION )的API:
1)WifiManager:getScanResults()、startScan()
2、由于 NEARBY_WIFI_DEVICES 权限仅适用于 Android 13 或更高版本,应保留对 ACCESS_FINE_LOCATION 的所有声明,以便在您的应用中提供向下兼容性。如果您的应用不会使用 Wi-Fi API 推导物理位置信息,就可以将此权限的最高 SDK 版本设为 32:
<manifest ...>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
android:maxSdkVersion="32" />
<application ...>
...
</application>
</manifest>
3、以 Android 13 为目标平台时,如果应用不会通过 Wi-Fi API 推导物理位置,请在清单文件中将 usesPermissionFlags 属性设为 neverForLocation。
<manifest ...>
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
android:usesPermissionFlags="neverForLocation" />
<application ...>
...
</application>
</manifest>
更安全地导出上下文注册的接收器
为了帮助提高运行时接收器的安全性,Android 13 允许您指定您应用中的特定广播接收器是否应被导出以及是否对设备上的其他应用可见。此变更时 Android 12 更安全的组件输出的延续;
对用户的影响
以 Android 13 或更高版本为目标平台的应用,必须为每个广播接收器指定 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED。否则,当您尝试注册广播接收器时,系统会抛出 SecurityException。
对开发者的影响
以 Android 13 或更高版本为目标平台的应用,在应用的每个广播接收器中,明确指明其他应用是否可以向其发送广播,如以下代码段所示:
// This broadcast receiver should be able to receive broadcasts from other apps.
// This option causes the same behavior as setting the broadcast receiver's
// "exported" attribute to true in your app's manifest.
context.registerReceiver(sharedBroadcastReceiver, intentFilter,
RECEIVER_EXPORTED);
// For app safety reasons, this private broadcast receiver should **NOT**
// be able to receive broadcasts from other apps.
context.registerReceiver(privateBroadcastReceiver, intentFilter,
RECEIVER_NOT_EXPORTED);
在后台使用身体传感器需要新的权限
以 Android 13 为目标平台,并且在后台运行时需要访问身体传感器信息,那么除了现有的 BODY_SENSORS 权限外,您还必须声明新的 BODY_SENSORS_BACKGROUND 权限。
对开发者的影响
如果您的应用以 Android 13 为目标平台,并且在后台运行时需要访问身体传感器信息,那么除了现有的 BODY_SENSORS 权限外,您还必须声明新的 BODY_SENSORS_BACKGROUND 权限。
应用自撤销权限
在Android 13中,谷歌添加了一个新的API,允许开发者降级权限。应用程序可以触发撤销授予调用API的包的一个或多个运行时权限。不需要访问特定运行时权限控制API的应用程序可以自行撤销这些权限,这样用户就可以确保这些应用程序不会在不知情的情况下使用这些API。
对用户的影响
对用户影响,可参考授权权限选项每次使用时询问(Only this time)的表现;
对开发者的影响
如需撤消特定运行时权限,请将该权限的名称传入 revokeOwnPermissionOnKill()。如需同时撤消一组运行时权限,请将这组权限的名称传入 revokeOwnPermissionsOnKill()。撤消是异步发生的,会终止与应用的 UID 相关联的所有进程。
系统只有在安全的情况下才会触发撤消操作。具体而言,当有应用组件仍在前台运行,或者有另一个应用正在访问您应用的组件(如 content provider)时,不会发生撤消。如果您想立即撤消权限,可以调用 exit()。但是,对 exit() 进行此类调用可能会导致当前正在访问您应用的其他应用出现未定义的行为或崩溃。
剪贴板擦除
Android提供了一个剪贴板服务,所有应用程序都可以使用它来放置和检索文本。尽管从技术上讲,任何应用都可以清除全局剪贴板中的主剪辑(只要它们是前台应用或Android 10+上的默认输入法),但Android本身不会自动清除剪贴板。这意味着任何留在全局剪贴板中的剪贴板项目都可以在以后被应用程序读取,尽管Android的剪贴板访问有toast消息可能会提醒用户。
Android 13增加了剪贴板自动清除功能。此功能在默认情况下处于禁用状态,在经过设定的时间后,将自动从全局剪贴板中清除主剪辑。默认情况下,经过3600000毫秒(60分钟)后,剪贴板将被清除。
对用户的影响
用户保存剪贴板的信息过段时间或被清除。
对开发者的影响
每次执行复制/读取(写入剪贴板setPrimaryClip,读getPrimaryClip)时,会重置一个消息,timeout(60min)后,自动清除剪贴板内存中的内容。即60min内,如果一直没有写入剪贴板的操作,剪贴板的内容会被自动清除。
intent 过滤器会屏蔽不匹配的 intent
当您的应用向以 Android 13 或更高版本为目标平台的其他应用的导出组件发送 intent 时,仅当该 intent 与接收应用中的 元素匹配时,系统才会传送该 intent。换言之,系统会屏蔽所有不匹配的 intent,但以下情况除外:
-发送给其他应用的未声明任何 intent 过滤器的组件的 intent。
-源自同一应用内的 intent。
-由系统发送的 intent。也就是说,从“系统 UID”(uid=1000) 发送的 intent。系统应用包括 system_server 和将 android:sharedUserId 设置为 android.uid.system 的应用。
-由具有ROOT权限的进程发送的 intent。
如果接收方应用升级到 Android 13 或更高版本,仅当 intent 与其声明的 元素匹配时,源自外部应用的所有 intent 才会传送到导出组件,而不考虑发送应用的目标 SDK 版本。
对用户的影响
如果应用调用是目标版本是 33且intent不匹配;则使用的应用会直接闪退;
对开发者的影响
发送方
-是否存在采用Intent 方式启动其他 App 服务或发送广播;startActivity()/startActivityForResult() / sendBroadcast()/startService()
-目标方对应的 Component 是否声明了 ;
-intent 对应 action、data等信息是否是否与目标方一致。
接收方
-需要确认是否目标 SDK 版本是否是33及以上;
-明确告知发送方完整信息。
停止使用共享用户 ID
如果您的应用使用已废弃的 android:sharedUserId 属性,并且不再依赖于该属性的功能,您可以将 android:sharedUserMaxSdkVersion 属性设置为 32,如以下代码段所示:
<manifest ...>
<!-- To maintain backward compatibility, continue to use
"android:sharedUserId" if you already added it to your manifest. -->
android:sharedUserId="SHARED_PACKAGE_NAME"
android:sharedUserMaxSdkVersion="32"
...
</manifest>
注意:如果您已在清单中定义了 android:sharedUserId 属性,请不要将其移除。这样做会导致应用更新失败。
更新的非SDK接口限制
Android 13包括了基于Android开发人员的协作以及最新的内部测试的受限制的非SDK接口的更新列表。只要有可能,在限制非SDK接口之前,请确保可以使用公共替代方案。
适配指导
non-SDK接口介绍
测试您的应用是否使用非 SDK 接口
Android 13 限制非SDK
Android 13 中有关限制非 SDK 接口的更新
系统优化
每一代Android在系统优化上都付出很大的努力,无论在性能、功耗、稳定性和用户体验上都给用户带来很好的体验。
前台服务 (FGS) 任务管理器
Android 13的新前台服务( Foreground Services:FGS)任务管理器显示当前运行前台服务的应用程序列表。此列表称为活动应用程序,可以通过下拉通知抽屉并点击启示来访问。每个应用程序旁边都会有一个“停止”按钮。
注意:当用户按您应用旁边的停止按钮时,系统会停止您的整个应用,而不仅仅是正在运行的前台服务。
对用户的影响
1、用户操作会停止您的整个应用
FGS任务管理器允许用户停止前台服务,无论目标SDK版本如何。以下是通过FGS任务管理器停止应用程序与从最近屏幕“向上滑动”(Google原生)或按“设置”中的“强制停止”相比的效果。
column1 | FGS 任务管理器 | Recents 向上滑动 | 强行停止 |
---|---|---|---|
从历史记录中移除 | ✔ | ✔ | ✔ |
立即从内存中移除 | ✔ | ✔ | |
停止媒体播放 | ✔ | ✔ | |
停止 FGS/移除关联的通知 | ✔ | ✔ | |
移除 activity 返回堆栈 | ✔ | ✔ | |
取消Job作业 | ✔ | ||
取消Alarm | ✔ |
注意:如果系统检测到您的应用长时间运行某项前台服务(在 24 小时的时间段内至少运行 20 小时),便会发送通知邀请用户与 FGS 任务管理器互动。
详见:https://developer.android.google.cn/about/versions/13/changes/fgs-manager#system-prompt-long-running-fgs
2、豁免
1)完全不会显示在 FGS 任务管理器中
-系统级应用
-安全应用,即具有 ROLE_EMERGENCY 角色的应用
-处于演示模式的设备上的应用
2)免于被用户停止
当以下类型的应用运行前台服务时,它们会显示在 FGS 任务管理器中,但应用名称旁边没有可以供用户按的停止按钮:
-设备所有者应用
-资料所有者应用
-常驻应用
-具有 ROLE_DIALER 角色的应用
对开发者的影响
使用如下命令,检查功能是否符合程序编写预期。
adb shell cmd activity stop-app PACKAGE_NAME
电池资源利用率
Android13推出了以下电池保护措施:
1)更新了系统何时将你的应用程序放入“受限”应用程序备用存储桶的规则。
2)当用户将应用程序置于后台电池使用的“受限”状态时,应用程序执行的新限制。
3)新的系统通知,提醒用户后台电池过度使用和长期运行的前台服务。
对用户的影响
对开发者的影响
要防止应用程序在后台运行,请在终端窗口中运行以下命令:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND deny
要强制系统将应用程序放入受限,请在终端窗口中运行以下命令:
adb shell am set-standby-bucket PACKAGE_NAME restricted
新功能和 API
Android T 面向开发者引入了一些出色的新功能和 API。以下几部分内容可帮助您了解适用于您的应用的功能并开始使用相关 API。
照片选择器和 API
为了保护用户的照片和视频隐私,Android 13 增加了一个系统照片选择器,这是一种标准和优化的方式,让用户可以安全地分享本地和云端照片。一直以来,Android 通过文档选择器让用户与应用分享任意类型的文件,且该应用不需要获得查看设备上所有媒体文件的权限。照片选择器扩展了这种能力,且针对照片和视频提供了更契合的体验。应用可以通过照片选择器 API 访问用户分享的照片和视频,且不需要拥有查看设备上所有媒体文件的权限。作为运行 Android 11 及以上系统的设备 (不包括 Go 设备) 中的 MediaProvider 模块更新的一部分,我们计划通过 Google Play 系统更新将照片选择器体验带给更多的 Android 用户。欢迎大家体验照片选择器 API,并和我们分享使用反馈!
注意:即将到来的Google Play系统更新预计将包括与photo picker相关的新功能。在更新中,该库将增加对针对Android 11(API级别30)或更高版本(不包括Android Go设备)的应用程序的支持。
适配需知:
developer.android.google.cn/about/versi…
OpenJDK 11 updates
Android 13 开始刷新 Android 的核心库,以与 OpenJDK 11 LTS 版本保持一致,并增添了适合应用和平台开发者的库更新和 Java 11 语言支持。Android 13 中引入的核心库变更还可以通过 Google Play 系统更新到 ART Mainline 模块,供 Android 12 设备使用。
适配需知:
Android 13 包含对核心库的以下更改:
支持将 var 关键字用于局部变量,以及用作参数 lambda。
String 类中的新方法:
1)isBlank()
2)lines()
3)repeat()
4)strip()
5)stripLeading()
6)stripTrailing()
-支持 Collection.toArray(IntFunction),以便更轻松地使集合适应数组。
-支持 java.util 类 Optional、OptionalDouble、OptionalInt 和 OptionalLong 中的 ifPresentOrElse()、isEmpty()、orElseThrow() 和 stream()。
-扩展了对 SocketOptions 的支持,包括重复使用套接字。
-NullReader、NullWriter、InputStream、OutputStream 和 transferTo()Reader 功能,用于将读取的字符传输给 Writer。
-添加了使用 Charsets 进行网址编码和解码的功能。
-适用于 FileReader、FileWriter、PrintStream 和 PrintWriter 的 Charset 功能。
-为 ByteArrayInput 或 OutputStream 以及 Input 或 OutputStream 新增了 transferTo()、readNBytes()、readAllBytes() 和 writeBytes() 函数。
-对 java.lang.invoke.VarHandle 的运行时和编译器支持。
-在内部使用 VarHandle 将 java.util.concurrent 更新到 OpenJDK 11 API。
Programmable shaders
Android 13 添加了对可编程 RuntimeShader 对象的支持,其行为是使用 Android Graphics Shading Language (AGSL) 定义的。AGSL 与 GLSL(OpenGL Shading Language) 共用大部分语法,但可用于 Android 渲染引擎中以自定义 Android 画布中的绘制行为以及过滤 View 内容。Android 在内部使用这些着色器来实现涟漪效果、模糊以及拉伸滚动,并且 Android 13 让您能为应用制作类似的高级效果。
快捷设置 API
在Android 7.0 Nougat中,谷歌引入了TileService API,允许应用程序将自己的自定义图块添加到“快捷设置”中。但是,为了将第三方应用程序中的互动程序添加到“快捷设置”中,用户需要下拉通知面板,点击“快捷设置编辑”按钮,然后向下滚动以找到他们想要添加的互动程序。虽然第三方应用程序有多种方式通知用户其自定义图块的存在,但用户仍然需要手动添加快捷设置图块。
从Android 13开始,新的图块放置API将允许应用程序提示用户直接将自定义图块添加到活动的快速设置图块集合中。当应用程序调用此API时,用户只需一步即可不离开应用就添加图块,而不必转到“快捷设置”来添加图块。
LED闪光灯亮度控制
Android 13版本在CameraManager类中包含了新方法,可以让应用程序获得并设置手电筒强度级别。CameraCharacteristics.FLASH_INFO_STRENGTH_MAXIMUM_LEVEL将支持以编程方式设置手电筒的亮度。原始设备制造商将需要实现新版本的相机设备HAL,以增加对该API的支持。然而,由于谷歌的供应商冻结要求,在升级到Android 13的设备中,对该功能的支持可能会非常有限。
有关Android 13新的LED闪光灯亮度控制API的更多信息,请参阅此文。
ActivityEmbedding
大屏幕设备使用户能够看到更多内容、执行更多操作、体验更多功能。大显示屏提供了同时运行多个activity 或同一 activity 的多个实例的机会。为了利用大屏幕的额外显示区域,Jetpack WindowManager 1.0 Beta03 引入了 activity 嵌入,该功能可以在 activity 之间拆分应用的任务窗口。
详情请参考《Activity embedding(原生平行视窗)适配指导书》
复制和粘贴显示
从 Android 13 开始,将内容添加到剪贴板时,系统会显示标准视觉确认界面。新确认界面会执行以下操作:
-确认内容已成功复制。
-提供所复制内容的预览。
在 Android 12L(API 级别 32)及更低版本中,用户经常不确定他们是否成功复制了内容或者复制了什么内容。
此功能可将应用在用户复制内容后显示的各种通知标准化,并让用户可以更好地控制剪贴板。请参阅此文。