一、背景
根据 Google 的时间表,Android 13 将于 2022 年第三季度发布,现基于开发者预览 2,整理出 Android 13 的行为变更以及适配(只做简单的记录,详细改动请参考文末的官方文档),目前 Android 13 主要的兼容问题还是在于隐私权限上。
二、影响应用的行为变更 – 所有应用
以下变更即无论采用哪种目标平台(targetSdkVersion),这些行为变更都会在 Android 13(
targetSdkVersion = 33
) 上的机器上生效,需要测试应用是否兼容。
2.1 前台服务(FGS)任务管理器
无论是采用哪种目标平台的应用,在 Android 13 的机器上,可以通过下拉通知抽屉展示使用中的应用,每个应用都有一个停止按钮,允许用户停止应用的前台服务。
FGS 相比较”向上滑动“退出应用的主要区别在于:
- FGS 会立即将应用从内存中移除
- FGS 停止应用时,不会发送任何回调
2.2 电池资源利用率
Android 13 引入了以下省电措施:
- 更新了有关系统何时将您的应用放入“受限”应用待机模式存储分区的规则。
- 对于您的应用在以下情况下可以执行的操作制定了新限制:用户因您应用的后台电池用量过高而将其置于“受限”状态。
-
新增了系统通知,用于就后台电池用量过高和长时间运行的前台服务向用户发出警告。
2.3 通知的运行时权限
对于新安装的应用,App 的目标平台不同表现为:
- 以 Android 13 为目标平台:App 需要在清单文件中申明 android.permission.POST_NOTIFICATIONS 权限,然后向用户请求授予通知权限。
- 以 Android 12 或以下为目标平台:当 App 创建其第一个通知渠道时,系统会显示权限对话框。
对于已安装的应用,App 的目标平台不同表现为:
- 以 Android 13 为目标平台:系统临时授予应用发送通知的权限,直到应用中的 Activity 首次启动。应用程序必须有一个现有的通知通道,且其通知不得被用户明确禁用。
- 以 Android 12 或以下为目标平台:系统临时授予应用发送通知的权限,直到用户在权限对话框中明确选择一个选项。
2.4 应用内语言选择器
Android 13 在手机设置中新增一个应用语言的列表,如果你的应用支持多语言,并且希望出现在这个列表中,需要在清单文件中声明 android:localeConfig
属性。
2.5 隐藏剪贴板中的敏感内容
在 Android 13 的设备上,复制内容到剪贴板,会在屏幕上展示一个预览浮窗,如下图:
改动可能会涉及到隐私信息的安全问题,比如密码、银行卡号等,对于此类信息可以通过代码设置一个标志,阻止敏感内容出现在内容预览中,如下图:
三、影响应用的行为变更 – 以 Android 13 为目标平台的应用
以下变更仅影响以 Android 13 为目标版本的应用生效。
3.1 通知权限会影响前台服务的显示
如果用户拒绝通知权限,他们仍会在前台服务(FGS)任务管理器中看到与这些前台服务相关的通知,但不会在抽屉式通知栏中看到这些通知。
3.2 针对附近 Wi-Fi 设备的新运行时权限
在以前的 Android 版本中,需要向用户申请 ACCESS_FINE_LOCATION
权限,App 才能完成 Wi-Fi 搜索、连接等功能。但是用户很难将位置信息权限与 Wi-Fi 功能相关联,因此在权限组 NEARBY_DEVICES
中引入了新的运行时权限 NEARBY_WIFI_DEVICES
。
3.3 细化媒体权限
如果您的应用以 Android 13 为目标平台,您必须请求一个或多个新权限,而不是 READ_EXTERNAL_STORAGE
和 WRITE_EXTERNAL_STORAGE
权限。
媒体类型 | 请求权限 |
---|---|
图片和照片 | READ_MEDIA_IMAGES |
视频 | READ_MEDIA_VIDEO |
音频文件 | READ_MEDIA_AUDIO |
3.4 在后台使用身体传感器需要新的权限
如果您的应用以 Android 13 为目标平台,并且在后台运行时需要访问身体传感器信息,那么除了现有的 BODY_SENSORS
权限外,您还必须声明新的 BODY_SENSORS_BACKGROUND
权限。
3.5 intent 过滤器会屏蔽不匹配的 intent
当您的应用向以 Android 13 或更高版本为目标平台的其他应用的导出组件发送 intent 时,仅当该 intent 与接收应用中的 <intent-filter>
元素匹配时,系统才会传送该 intent。不匹配的 intent 会被屏蔽。