vivo Android 13应用适配指南

利用 JobScheduler,应用可使用 JobInfo.Builder.setPrefetch() 将特定作业标记为“预提取”作业,这意味着,理想情况下这些作业应该在应用下一次启动前提前一点运行,以提升用户体验。过去,JobScheduler 仅使用该信号让预提取作业有机会使用免费或多余的数据。

1. Android 13上的主要变更

1.1 兼容性

1.1.1 使用 JobScheduler 改进预提取作业处理

说明:利用 JobScheduler,应用可使用 JobInfo.Builder.setPrefetch() 将特定作业标记为“预提取”作业,这意味着,理想情况下这些作业应该在应用下一次启动前提前一点运行,以提升用户体验。过去,JobScheduler 仅使用该信号让预提取作业有机会使用免费或多余的数据。

在 Android 13 中,系统现在会尝试确定应用下次启动的时间,并根据该估算值运行预提取作业。应用应尝试使用预提取作业来完成他们想要在下次应用启动前完成的任何工作。

影响范围:运行于Android 13上的所有应用。

1.1.2 停止使用共享用户 ID

说明:如果应用使用已废弃的 android:sharedUserId 属性,并且不再依赖于该属性的功能,可以将 android:sharedUserMaxSdkVersion 属性设置为 32。

这个新属性会告知系统,应用不再依赖于共享用户 ID。如果应用声明 android:sharedUserMaxSdkVersion 并且首次安装在搭载 Android 13 或更高版本的设备上,则应用的行为就像从未定义过 android:sharedUserId 一样,更新后的应用仍会使用现有的共享用户ID。

如果已在清单中定义了 android:sharedUserId 属性,请不要将其移除。这样做会导致应用更新失败。

共享用户 ID 会在软件包管理器中导致具有不确定性的行为。应用应使用适当的通信机制(例如服务和 content provider),在共享组件之间实现互操作性。

影响范围:运行于Android 13上的所有应用。

1.2 用户体验

每次Android系统的升级,几乎都会在交互体验上带来一些变化,此次Android 13也不例外。

1.2.1 前台服务(FGS)任务管理器

无论应用targetSdkVersion为多少,Android 13 都允许用户从抽屉式通知栏中停止前台服务。这项新功能称为前台服务 (FGS) 任务管理器,它会显示当前正在运行前台服务的应用列表。此列表的标签为使用中的应用,每个应用旁边都有一个停止按钮。

image.png

1.2.2 放置快捷设置图块API

借助新的图块放置API,应用现在可以提示用户直接将自定义图块添加到通知栏中的快捷设置图块中。借助新的系统对话框,用户只需一步即可不离开应用就添加图块,而不必转到“快捷设置”来添加图块。

image.png

1.2.3 按应用设置的语言偏好设置

在许多情况下,多语言用户会将其系统语言设置为某一种语言,但又想为特定应用选择其他语言。为了帮助应用为这些用户提供更好的体验,Android 13 针对支持多种语言的应用引入了以下新功能:

1. 应用可在运行时在界面中设置使用其他语言

2. 用户可在系统设置里为每个应用选择首选语言

1.3 图形、图像和媒体

1.3.1 可编程的着色器

Android 13 添加了对可编程 RuntimeShader 对象的支持,其行为是使用 Android 图形着色语言 (AGSL) 定义的。AGSL 与 GLSL 共用大部分语法,但可用于 Android 渲染引擎中以自定义 Android 画布中的绘制行为以及过滤 View 内容。Android 在内部使用这些着色器来实现涟漪效果、模糊以及拉伸滚动,并且 Android 13 让您能为应用制作类似的高级效果。

1.3.2 蓝牙低功耗音频

低功耗 (LE) 音频是新一代无线音频,旨在取代传统蓝牙并支持新的使用情形和连接拓扑。通过该技术,用户能够与朋友和家人分享音频内容以及播放音频给他们听,也可以订阅信息、娱乐或无障碍用途的公共广播内容。这项新技术可以确保用户接收到高保真度的音频,而不必牺牲电池续航时间,并且还可以在不同使用情形之间无缝切换,这是传统蓝牙技术无法实现的。

1.4 安全性与隐私

1.4.1 通知运行时权限

说明:Android 13 中引入了新的运行时权限,用于从应用发送非豁免通知:POST_NOTIFICATIONS。

1. 限对话框中可执行以下操作:

 ●  选择“允许”

如果用户选择允许选项,应用可以执行以下操作:

①发送通知。可以使用所有通知渠道。

②发送与前台服务相关的通知。这些通知会显示在抽屉式通知栏中。

 ●  用户选择“不允许”

如果用户选择不允许选项,应用将无法发送通知。除了几个特定情况之外,所有通知渠道都会被屏蔽。这类似于用户在系统设置中手动关闭应用的所有通知后发生的行为。

 ●  用户滑开对话框

滑开对话框(即既没有选择允许,也没有选择不允许),会发生以下行为:

①如果应用符合获得临时通知授权的条件,系统会保留临时授权。

②如果应用没有临时授权,则将无法发送通知。

2. 安装的应用的影响

在搭载 Android 13 的设备上安装应用,应用的通知默认处于关闭状态。在请求新的权限且用户向应用授予该权限之前,应用都将无法发送通知。

权限对话框的显示时间取决于应用的目标 SDK 版本:

 ●  应用targetSdkVersion为33或者更高版本时,应用将可以完全自行控制权限对话框的显示时间。应用可以借此机会向用户说明应用需要此权限的原因,进而鼓励他们授予该权限。

 ●  应用targetSdkVersion低于33时,系统会在应用创建第一个通知渠道时显示权限对话框。这通常是在应用启动时。

3. 对已安装应用的影响

为最大限度地减少与新通知权限相关的中断,系统会自动向系统升级前用户设备上已安装的所有符合条件的应用临时授予新通知权限。此临时授权的持续时间取决于应用的目标 SDK 版本:

 ●  如果应用targetSdkVersion为33或者更高版本时,则临时授权将持续到应用首次启动 activity 为止。

     应用可以完全自行控制权限对话框的显示时间。应用可以借此机会向用户说明应用需要此权限的原因,进而鼓励他们授予该权限。

 ●  如果应用targetSdkVersion低于33时,则临时授权将一直有效,直到用户在通知权限运行时对话框中明确选择一个选项。也就是说,如果用户在未做出选择的情况下关闭了权限提示,系统会保留应用的临时授权。

影响范围:运行于Android 13上的所有应用。

适配建议:

1. 更新应用的目标 SDK 版本。

2. 等待一段时间再显示通知权限提示。等到用户熟悉您的应用之后,再请求他们授予任何权限。新用户可能想要探索您的应用,并切身体会每项通知请求可以带来的好处。

3. 在上下文中请求权限。在应用内请求通知权限时,请在正确的上下文中请求,以便用户明确了解通知的用途以及应该选择接收通知的原因。

4. 检查您的应用能否发送通。用户必须为应用启用通知,应用才能发送通知。要确认用户是否已启用通知,请调用 areNotificationsEnabled()。

5. 以负责任的方式使用权限。获得发送通知的许可后,请负责任地使用该权限。用户可以查看您的应用每天发送的通知数量,并且可以随时撤消该权限。

1.4.2 针对附近 Wi-Fi 设备的新运行时权限

说明:在以前的 Android 版本中,用户需要向应用授予 ACCESS_FINE_LOCATION 权限,应用才能完成与热点相关的多个常见 Wi-Fi 用例、Wi-Fi 直连、Wi-Fi RTT 等。

由于用户很难将位置信息权限与 Wi-Fi 功能相关联,因此 Android 13 在 NEARBY_DEVICES 权限组中引入了新的运行时权限,适用于管理设备与附近 Wi-Fi 接入点连接情况的应用。此权限 (NEARBY_WIFI_DEVICES) 可满足这些 Wi-Fi 用例。

只要应用不会通过 Wi-Fi API 推导物理位置,那么当targetSdkVersion为33或更高版本的应用使用Wi-Fi API时,就可以请求 NEARBY_WIFI_DEVICES 而不是 ACCESS_FINE_LOCATION。

影响范围:targetSdkVersion为33的应用。

1.4.3 在后台使用身体传感器需要新的权限

说明:Android 13 中引入了“在使用时”访问身体传感器(例如心率、体温和血氧饱和度)的概念。如果应用targetSdkVersion为33并且在后台运行时需要访问身体传感器信息,那么除了现有的 BODY_SENSORS 权限外,还必须声明新的 BODY_SENSORS_BACKGROUND 权限。

影响范围:targetSdkVersion为33的应用。

1.4.4 intent 过滤器会屏蔽不匹配的 intent

说明:当应用向targetSdkVersion为33或更高版本的其他应用的导出组件发送 intent 时,仅当该 intent 与接收应用中的 <intent-filter> 元素匹配时,系统才会传送该 intent。系统会屏蔽所有不匹配的 intent,以下情况除外:

 ●  发送给其他应用的未声明任何 intent 过滤器的组件的 intent。

 ●  发送给应用中的其他组件的 intent。

 ●  由系统发送的 intent。

 ●  由具有根级特权的用户发送的 intent。

影响范围:targetSdkVersion为33的应用。

1.4.5 更安全地导出上下文注册的接收器

说明:为了帮助提高运行时接收器的安全性,Android 13 允许指定应用中的特定广播接收器是否应被导出以及是否对设备上的其他应用可见。如果导出广播接收器,其他应用将可以向应用发送不受保护的广播。

在以前的 Android 版本中,设备上的任何应用都可以向动态注册的接收器发送不受保护的广播,除非该接收器受签名权限的保护。要实现此安全增强措施,请执行以下操作:

 ●  启用 DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED 兼容性框架更改。

 ●  在应用的每个广播接收器中,明确指明其他应用是否可以向其发送广播。

注意:如果启用了 DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED 兼容性框架更改,则必须为每个广播接收器指定 RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED。否则,当注册广播接收器时,系统会抛出 SecurityException。

影响范围:targetSdkVersion为33的应用。

1.4.6 可主动降级的权限

说明:从 Android 13 开始,应用可以撤消先前由系统或用户授予的运行时权限。此 API 可以帮助应用保护用户的隐私。如需撤消特定运行时权限,请将该权限的名称传入 revokeOwnPermissionOnKill()。如需同时撤消一组运行时权限,请将这组权限的名称传入 revokeOwnPermissionsOnKill()。撤消是异步发生的,会终止与应用的 UID 相关联的所有进程。

系统只有在安全的情况下才会触发撤消操作。当有应用组件仍在前台运行,或者有另一个应用正在访问应用的组件时,不会发生撤消。如果想立即撤消权限,可以调用 exit()。但是,对 exit() 进行此类调用可能会导致当前正在访问应用的其他应用出现未定义的行为或崩溃。

1.4.7 使用精确闹钟的新权限

说明:应用可以使用自动授予应用的 USE_EXACT_ALARM 权限。不过,应用若要使用此权限,必须至少满足以下条件之一:

1.应用是闹钟应用或计时器应用。

2.应用是日历应用,可显示即将进行的活动的通知。

即将推出的 Google Play 政策会阻止应用使用 USE_EXACT_ALARM 权限,除非应用满足前面列表中显示的任一情况。

影响范围:targetSdkVersion为33的应用。

1.4.8 精细媒体权限

说明:如果应用以 Android 13 为目标平台,则必须请求一项或多项新权限,而不是 READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE 权限。

请求的权限集取决于您的应用需要访问的媒体类型:

媒体类型请求许可
图片和照片READ_MEDIA_IMAGES
视频READ_MEDIA_VIDEO
音频文件READ_MEDIA_AUDIO

如果用户之前授予应用READ_EXTERNAL_STORAGE权限,系统会自动将每个新权限授予您的应用。否则,当应用请求上表中显示的任何权限时,系统会显示一个面向用户的对话框。在下图 中,应用程序请求READ_MEDIA_AUDIO权限。如果同时请求 READ_MEDIA_IMAGES权限和READ_MEDIA_VIDEO权限,则只会出现一个系统权限对话框。

image.png

2. 参考链接

[1]Android 13开发者预览版:https://developer.android.com/about/versions/13/overview

编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/11192/

部分内容来自网络投稿,如有侵权联系立删

(1)
上一篇 2022年11月21日 下午3:46
下一篇 2022年11月21日 下午3:48

相关推荐