为媒体文件访问提供更细化的权限
- READ_MEDIA_IMAGES (适用于图像和照片) developer.android.google.cn/reference/a…
- READ_MEDIA_VIDEO (适用于视频) developer.android.google.cn/reference/a…
- READ_MEDIA_AUDIO (适用于音频文件) developer.android.google.cn/reference/a…
图 1. 媒体文件访问权限的权限授权提示框
用户授予该权限后,应用将拥有对相应媒体文件类型的读取权限。为简化用户体验,如果应用同时请求 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO 权限,系统会只显示一个对话框来授予这些权限。如果您的应用需要访问共享媒体文件,请在应用以 Android 13 为目标平台时迁移至这些新权限。
前台服务 (FGS) 任务管理器
无论应用采用何种目标 SDK 版本,Android 13 都允许用户从抽屉式通知栏中停止前台服务。这项新功能称为 FGS 任务管理器,它会显示当前正在运行前台服务的应用列表。此列表的标签为使用中的应用。每个应用旁边都有一个停止按钮。图 1 说明了搭载 Android 13 的设备上的 FGS 任务管理器的工作流程。
图 2. 搭载 Android 13 的设备上的 FGS 任务管理器工作流程。
注意:当用户按您应用旁边的停止按钮时,系统会停止您的整个应用,而不仅仅是正在运行的前台服务。
通知的运行时权限
Android 13 中引入了新的运行时权限,用于从应用发送非豁免通知:POST_NOTIFICATIONS。此更改有助于用户专注于最重要的通知。
强烈建议您尽快以 Android 13 为目标平台,以获享此功能提供的额外控制和灵活性。如果您继续以 12L(API 级别 32)或更低版本为目标平台,您将失去在应用功能环境中请求权限的机会。
使用新权限
如需向应用请求新的通知权限,请将应用更新为以 Android 13 为目标平台,并完成与请求其他运行时权限类似的流程,如以下几个部分所述。
需要在应用的清单文件中声明的权限会显示在以下代码段中:
<manifest ...>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application ...>
...
</application>
</manifest>
应用功能取决于用户在权限对话框中所做的选择
在此对话框中,用户可执行以下操作:
注意:如果用户点按不允许,即使仅点按一次,系统也不会再次提示用户,除非他们卸载并重新安装您的应用。 下面几个部分介绍了根据用户操作的不同,应用会有哪些不同的行为表现。
用户选择“允许”
如果用户选择允许选项,您的应用可以执行以下操作:
- 发送通知。可以使用所有通知渠道。
- 发送与前台服务相关的通知。这些通知会显示在抽屉式通知栏中。
用户选择“不允许”
如果用户选择不允许选项,您的应用将无法发送通知。除了几个特定角色之外,所有通知渠道都会被屏蔽。这类似于用户在系统设置中手动关闭应用的所有通知后发生的行为。
用户滑开对话框
如果用户滑开对话框(即他们既没有选择允许,也没有选择不允许),会发生以下行为:
- 如果您的应用符合获得临时通知授权的条件,系统会保留临时授权。
- 如果您的应用没有临时授权,则将无法发送通知。
对新安装的应用的影响
如果用户在搭载 Android 13 的设备上安装您的应用,应用的通知默认处于关闭状态。在您请求新的权限且用户向您的应用授予该权限之前,您的应用都将无法发送通知。
权限对话框的显示时间取决于应用的目标 SDK 版本:
- 如果您的应用以 Android 13 或更高版本为目标平台,应用将可以完全自行控制权限对话框的显示时间。您可以借此机会向用户说明应用需要此权限的原因,进而鼓励他们授予该权限。
- 如果您的应用以 12L(API 级别 32)或更低版本为目标平台,系统会在您创建第一个通知渠道时显示权限对话框。这通常是在应用启动时。
对现有应用更新的影响
注意:请考虑下面这种情形,即应用安装在搭载 12L 或更低版本的旧设备上,用户在该设备上允许接收通知,但想淘汰该设备。用户现在使用的是搭载 Android 13 的新设备,并通过备份和恢复功能恢复了应用。
在这种情况下,系统会将您的应用视为“现有应用”,因此该应用会获得发送通知的临时权限。
为最大限度地减少与新通知权限相关的中断,系统会自动向系统升级到 Android 13 之前用户设备上已安装的所有符合条件的应用临时授予新通知权限。此临时授权的持续时间取决于应用的目标 SDK 版本:
-
如果应用以 Android 13 或更高版本为目标平台,则临时授权将持续到应用首次启动 activity 为止。
您的应用可以完全自行控制权限对话框的显示时间。您可以借此机会向用户说明应用需要此权限的原因,进而鼓励他们授予该权限。
-
如果您的应用以 12L 或更低版本为目标平台,则临时授权将一直有效,直到用户在通知权限运行时对话框中明确选择一个选项。也就是说,如果用户在未做出选择的情况下关闭了权限提示,系统会保留应用的临时授权。
获得临时授权的资格要求
您的应用要**获得临时授权必须满足以下条件:应用必须已具有通知渠道,并且用户未在搭载 12L 或更低版本的设备上明确停用应用的通知。
如果用户在搭载 12L 或更低版本的设备上停用了应用的通知,当设备升级到 Android 13 或更高版本后,该停用会继续有效。
豁免
与媒体会话有关的通知不受此行为变更的影响。
最佳做法
本部分将介绍几种在应用中最有效地使用新通知权限的方式。
更新应用的目标 SDK 版本
为了让应用更灵活地显示权限对话框,请将应用更新为以 Android 13 为目标平台。
等待一段时间再显示通知权限提示
等到用户熟悉您的应用之后,再请求他们授予任何权限。
新用户可能想要探索您的应用,并切身体会每项通知请求可以带来的好处。您可以通过用户操作触发权限提示。下面列举了几个适合显示通知权限提示的时机:
- 用户点按“提醒铃铛”按钮时。
- 用户选择关注他人的社交媒体帐号时。
- 用户提交外卖订单时。
图 1 显示了请求通知权限的建议工作流程。或者,您也可以设置一个请求以在应用启动时显示,但仅在应用第 3 次或第 4 次启动后才显示。
图 3. 针对请求通知权限建议的用户驱动工作流程
在上下文中请求权限
在应用内请求通知权限时,请在正确的上下文中请求,以便用户明确了解通知的用途以及应该选择接收通知的原因。例如,电子邮件应用可能包含为每封新邮件发送通知的选项,或仅为用户是唯一收件人的邮件发送通知的选项。
借此机会明确向用户表明您的意图,有助于鼓励用户向您的应用授予通知权限。
检查您的应用能否发送通知
用户必须为您的应用启用通知,您的应用才能发送通知。要确认用户是否已启用通知,请调用 areNotificationsEnabled()。
以负责任的方式使用权限
获得发送通知的许可后,请负责任地使用该权限。用户可以查看您的应用每天发送的通知数量,并且可以随时撤消该权限。