与早期版本一样,Android 13 包含一些行为变更,这些变更可能会影响您的应用。以下行为变更仅影响以 Android 13 或更高版本为目标平台的应用。如果您的应用以 Android 13 或更高版本为目标平台,您应该修改自己的应用以适当地支持这些行为(如果适用)。
此外,请务必查看对 Android 13 上运行的所有应用都有影响的行为变更列表。
隐私权
通知权限会影响前台服务的显示
如果用户拒绝通知权限,他们仍会在前台服务 (FGS) 任务管理器中看到与这些前台服务相关的通知,但不会在抽屉式通知栏中看到这些通知。
针对附近 Wi-Fi 设备的新运行时权限
在以前的 Android 版本中,用户需要向您的应用授予 ACCESS_FINE_LOCATION
权限,应用才能完成与热点相关的多个常见 Wi-Fi 用例、Wi-Fi 直连、Wi-Fi RTT 等。
由于用户很难将位置信息权限与 Wi-Fi 功能相关联,因此 Android 13(API 级别 33)在 NEARBY_DEVICES
权限组中引入了新的运行时权限,适用于管理设备与附近 Wi-Fi 接入点连接情况的应用。此权限 (NEARBY_WIFI_DEVICES
) 可满足这些 Wi-Fi 用例。
只要您的应用不会通过 Wi-Fi API 推导物理位置,那么当您以 Android 13 或更高版本为目标平台并使用 Wi-Fi API 时,就可以请求 NEARBY_WIFI_DEVICES
而不是 ACCESS_FINE_LOCATION
。此过程类似于您在 Android 12(API 级别 31)及更高版本中声明绝不会将蓝牙设备信息用于获取位置信息的过程。
注意:仅当您调用 Wi-Fi API 时,此更改才会影响您的应用。请查看受影响的 API 列表。
详细了解附近 Wi-Fi 设备权限。
细化的媒体权限
如果您的应用以 Android 13 为目标平台,您必须请求一个或多个新权限,而不是 READ_EXTERNAL_STORAGE
和 WRITE_EXTERNAL_STORAGE
权限。
您请求的权限集取决于应用需要访问的媒体类型:
媒体类型 | 请求权限 |
---|---|
图片和照片 | READ_MEDIA_IMAGES |
视频 | READ_MEDIA_VIDEO |
音频文件 | READ_MEDIA_AUDIO |
如果用户之前向您的应用授予了 READ_EXTERNAL_STORAGE
权限,系统会自动向您的应用授予每个新权限。
否则,当应用请求上表中显示的任何权限时,系统会显示面向用户的对话框。在图 1 中,应用请求 READ_MEDIA_AUDIO
权限。如果您同时请求 READ_MEDIA_IMAGES
权限和 READ_MEDIA_VIDEO
权限,系统只会显示一个系统权限对话框。
注意:如果您的应用只需要访问图片、照片和视频,请考虑使用照片选择器,而不是声明 READ_MEDIA_IMAGES
和 READ_MEDIA_VIDEO
权限。
以 Android 13 为目标平台的迁移步骤
以 Android 13 为目标平台后,请声明您的应用所需的媒体权限。为了保持与旧版 Android 的兼容性,请在将 maxSdkVersion
设置为 32
时声明 READ_EXTERNAL_STORAGE
权限,如以下代码段所示:
1 | <manifest ...> |
注意:您无需再声明 WRITE_EXTERNAL_STORAGE
权限。
在后台使用身体传感器需要新的权限
Android 13 中引入了“在使用时”访问身体传感器(例如心率、体温和血氧饱和度)的概念。此访问模式与 Android 10(API 级别 29)系统为位置信息引入的模式非常相似。
如果您的应用以 Android 13 为目标平台,并且在后台运行时需要访问身体传感器信息,那么除了现有的 BODY_SENSORS
权限外,您还必须声明新的 BODY_SENSORS_BACKGROUND
权限。
注意:这是受到“硬性限制”的权限,除非设备的安装程序针对您的应用将该权限列入了许可名单,否则您的应用将无法获得此权限。如需了解详情,请参阅有关受限权限的指南。
安全
intent 过滤器会屏蔽不匹配的 intent
当您的应用向以 Android 13 或更高版本为目标平台的其他应用的导出组件发送 intent 时,仅当该 intent 与接收应用中的 `` 元素匹配时,系统才会传送该 intent。不匹配的 intent 会被屏蔽。
不强制要求匹配 intent 的例外情况包括:
- 传送到未声明任何 intent 过滤器的组件中的 intent。
- 源自同一应用内的 intent。
- 源自系统的 intent;也就是说,从“系统 UID”(uid=1000) 发送的 intent。系统应用包括
system_server
和将android:sharedUserId
设置为android.uid.system
的应用。 - 源自根的 intent。
如果接收方应用升级到 Android 13 或更高版本,仅当 intent 与其声明的 `` 元素匹配时,源自外部应用的所有 intent 才会传送到导出组件,而不考虑发送应用的目标 SDK 版本。
性能和电池
电池资源利用率
如果用户因后台电池用量过高而将您的以 Android 13 为目标平台的应用置于“受限”状态,系统会应用多项与广播相关的限制。
如需详细了解针对受限后台电池用量的新限制,请参阅介绍 Android 13 中引入的“电池资源利用率”功能的页面。
用户体验
派生自 PlaybackState
的媒体控件
对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,系统会从 PlaybackState
操作派生媒体控件。这样,系统便可以显示一组功能更丰富的控件,这些控件在技术上是可以在手机和平板电脑设备之间保持一致的,同时还与媒体控件在 Android Auto 和 Android TV 等其他 Android 平台上的呈现方式保持一致。
在 Android 13 之前,系统会按照添加顺序显示 MediaStyle
通知中的最多五项操作。在紧凑模式下(例如,在收起的快捷设置中),系统会显示最多三项操作(通过 setShowActionsInCompactView()
指定)。
从 Android 13 开始,系统会根据 PlaybackState
显示最多五个操作按钮,如下表所述。在紧凑模式下,将只显示前三个操作槽位。对于未以 Android 13 为目标平台的应用或不包含 PlaybackState
的应用,系统将根据添加到 MediaStyle
通知中的 Action
列表显示控件,如前一段所述。
槽位 | 操作 | 条件 |
---|---|---|
1 | 播放 | PlaybackState 的当前状态是以下状态之一:STATE_NONE``STATE_STOPPED``STATE_PAUSED``STATE_ERROR |
加载旋转图标 | PlaybackState 的当前状态是以下状态之一:STATE_CONNECTING``STATE_BUFFERING |
|
暂停 | PlaybackState 的当前状态不是以上任何状态。 |
|
2 | 上一首 | PlaybackState 操作包含 ACTION_SKIP_TO_PREVIOUS 。 |
自定义 | PlaybackState 操作不包含 ACTION_SKIP_TO_PREVIOUS ,并且 PlaybackState 自定义操作包含尚未执行的自定义操作。 |
|
空 | PlaybackState extra 包含键 SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV 的 true 布尔值。 |
|
3 | 下一首 | PlaybackState 操作包括 ACTION_SKIP_TO_NEXT 。 |
自定义 | PlaybackState 操作不包含 ACTION_SKIP_TO_NEXT ,并且 PlaybackState 自定义操作包含尚未执行的自定义操作。 |
|
空 | PlaybackState extra 包含键 SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT 的 true 布尔值。 |
|
4 | 自定义 | PlaybackState 自定义操作包含尚未执行的自定义操作。 |
5 | 自定义 | PlaybackState 自定义操作包含尚未执行的自定义操作。 |
自定义操作会按照添加到 PlaybackState
中的顺序执行。