概述
类别 | 类型 | 名称 |
---|---|---|
核心功能 | 新功能和 API | OpenJDK 11 更新 Android 13 包含许多更新,以与 OpenJDK 11 LTS 版本保持一致。 |
图形 | 新功能和 API | 可编程的着色器 应用可以使用可编程的 RuntimeShader 对象来制作高级效果。 |
隐私权和安全 | 变更(以 Android 13 及更高版本为目标平台的应用) | 针对附近 Wi-Fi 设备的新运行时权限 使用某些 Wi-Fi API 时,不需要获取设备物理位置的应用应使用新权限坚决声明此情况。 |
隐私权和安全 | 变更(以 Android 13 及更高版本为目标平台的应用) | intent 过滤器会屏蔽不匹配的 intent 应用不会再接收从外部应用所导出组件的 intent,除非 intent 与声明的 <intent-filter> 元素相匹配。 |
隐私权和安全 | 新功能和 API | 照片选择器 应用应使用新的照片选择器为用户提供一种安全的内置媒体文件选择方式,让用户无需向应用授予对整个媒体库的访问权限。 |
隐私权和安全 | 新功能和 API | 针对附近 Wi-Fi 设备的新运行时权限 应用可以请求新权限,以便在不获取设备位置信息的情况下发现附近的 Wi-Fi 设备。 |
用户体验 | 新功能和 API | 带主题的应用图标 应用可以提供能利用 Material You 动态配色功能在用户设备上设置样式的单色应用图标。 |
用户体验 | 新功能和 API | Quick Settings Placement API 提供自定义图块的应用可在“快捷设置”中提供这类图块。 |
用户体验 | 新功能和 API | 按应用设定的语言偏好设置 应用可以使用新平台 API 设置或获得用户在每个应用中的首选语言。 |
用户体验 | 新功能和 API | 更快断字 Android 13 显着提升了 TextView 实例的断字性能。 |
1.OpenJDK 11 更新
Android 13 开始刷新 Android 的核心库,以与 OpenJDK 11 LTS 版本保持一致,并增添了适合应用和平台开发者的库更新和 Java 11 语言支持。Android 13 中引入的核心库变更还可以通过 Google Play 系统更新到 ART Mainline 模块,供 Android 12 设备使用。
Android 13 包含对核心库的以下更改:
- 支持将
var
关键字用于局部变量,以及用作参数 lambda。 -
String 类中的新方法:
isBlank()
lines()
repeat()
strip()
stripLeading()
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。
Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。
2.可编程的着色器
改写自此 GLSL 着色器的 AGSL 动画着色器。
Android 13 添加了对可编程 RuntimeShader 对象的支持,其行为是使用 Android 图形着色语言 (AGSL) 定义的。AGSL 与 GLSL 共用大部分语法,但可用于 Android 渲染引擎中以自定义 Android 画布中的绘制行为以及过滤 View 内容。Android 在内部使用这些着色器来实现涟漪效果、模糊以及拉伸滚动,并且 Android 13 让您能为应用制作类似的高级效果。
3.针对附近 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 推导物理位置,那么当您以 Android 13 或更高版本为目标平台并使用 Wi-Fi API 时,可以请求 NEARBY_WIFI_DEVICES
而不是 ACCESS_FINE_LOCATION
。
4.intent 过滤器会屏蔽不匹配的 intent
在现有实现中,“intent 过滤器”一词不合常理,因为它不会过滤传递给某个组件的 intent;而是仅在隐式 intent 的 intent 解析期间相关。当应用在其清单中注册某个导出的组件并添加 <intent-filter>
时,该组件可以由任何 intent 启动,即使那些 intent 与 intent 过滤器不匹配也可以。
启动组件时,如果不检查 intent,在某些情况下,这让外部应用能够触发本应属于应用内部的功能。
在此变更之前,可通过两种方法将 intent 传递给存在 intent 与所声明 <intent-filter>
元素不匹配情况的组件(例如 <activity>
):
-
显式 intent:已设置组件名称的 intent;只要发送者有相应权限,这种 intent 始终会传递给相应组件。
-
intent 选择器:当将匹配的 intent 设置为主 intent 的选择器时,系统将始终传递主 intent。
对于以 Android 13 或更高版本(即 intent 接收端)为目标平台的应用,当且仅当导出的组件与其声明的 <intent-filter>
元素相匹配时,系统才会将来自外部应用的所有 intent 传递给该组件。
不匹配的 intent 会被屏蔽。未强制执行 intent 匹配的例外情况包括:
- 传送到未声明任何 intent 过滤器的组件中的 intent
- 来自同一应用内、来自系统和来自根的 intent
5.照片选择器
Android 13 包含对新照片选择器工具的支持。此工具为用户提供了一种安全的内置媒体文件选择方式,让其无需向应用授予对整个媒体库的访问权限。
注意:即将发布的 Google Play 系统更新预计会包含与照片选择器有关的新功能。在一项此类更新中,该库将增加对以 Android 11(API 级别 30)或更高版本为目标平台的应用(不包括 Android Go 设备)的支持。
5.1选择媒体
照片选择器提供了一个可浏览、可搜索的界面,其中按日期(从最近到最早)顺序向用户呈现其媒体库中的文件。您可以指定用户只能看到照片或只能看到视频,并且默认情况下,允许的媒体选择量上限设置为 1。
5.2定义分享限制
应用可以声明 android.provider.extra.PICK_IMAGES_MAX 的值,该值表示在向用户显示时照片选择器中显示的媒体文件数量上限。例如,如果您提示用户为其帐号选择要求的个人资料照片,请将一张照片设置为分享要求上限。
注意:如果您选择的上限为 1 张,照片选择器会以半屏模式打开。
如需在单选模式下启动照片选择器,请执行以下操作:
// Launches photo picker in single-select mode.
// This means that the user can select one photo or video.
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
startActivityForResult(intent, PHOTO_PICKER_REQUEST_CODE);
5.3选择多张照片或多个视频
如果应用的用例需要用户选择多张照片或多个视频,您可以使用 EXTRA_PICK_IMAGES_MAX
extra 指定照片选择器中应显示照片的数量上限,如以下代码段中所示:
// Launches photo picker in multi-select mode.
// This means that user can select multiple photos/videos, up to the limit
// specified by the app in the extra (10 in this example).
final int maxNumPhotosAndVideos = 10;
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotosAndVideos);
startActivityForResult(intent, PHOTO_PICKER_MULTI_SELECT_REQUEST_CODE);
请注意,可指定为文件数量上限的最大数字存在平台限制。如需访问此限制,请调用 MediaStore#getPickImagesMaxLimit()
。
5.4处理照片选择器结果
照片选择器启动后,使用新的 ACTION_PICK_IMAGES
intent 来处理结果。该选择器会返回一组 URI:
// onActivityResult() handles callbacks from the photo picker.
@Override
protected void onActivityResult(
int requestCode, int resultCode, final Intent data) {
if (resultCode != Activity.RESULT_OK) {
// Handle error
return;
}
switch(requestCode) {
case REQUEST_PHOTO_PICKER_SINGLE_SELECT:
// Get photo picker response for single select.
Uri currentUri = data.getData();
// Do stuff with the photo/video URI.
return;
case REQUEST_PHOTO_PICKER_MULTI_SELECT:
// Get photo picker response for multi select
for (int i = 0; i < data.getClipData().getItemCount(); i++) {
Uri currentUri = data.getClipData().getItemAt(i).getUri();
// Do stuff with each photo/video URI.
}
return;
}
}
默认情况下,照片选择器会既显示照片又显示视频。您还可以在 setType() 方法中设置 MIME 类型,以便按“仅显示照片”或“仅显示视频”进行过滤。例如,如需在照片选择器中仅显示视频,请将 video/*
传入 setType()
:
// Launches photo picker for videos only in single select mode.
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
intent.setType("video/*");
startActivityForResult(intent, PHOTO_PICKER_VIDEO_SINGLE_SELECT_REQUEST_CODE);
// Apps can also change the mimeType to allow users to select
// images only - intent.setType("images/*");
// or a specific mimeType - intent.setType("image/gif");
注意:您的应用不能持续访问从此 intent 返回的 URI。当应用的进程结束后,该应用将无法访问 URI。
6.针对附近 Wi-Fi 设备的新运行时权限
7.带主题的应用图标
8.Quick Settings Placement API
Android 13 开发者预览版_不会写代码的猴子的博客-CSDN博客Android 13权限变更,功能和API概览https://blog.csdn.net/mozushixin_1/article/details/123704040
9.为多语言用户提供更好的支持
Android 13 引入了几项功能来改进多语言用户的应用体验,具体介绍请参阅以下几部分:
按应用设定的语言偏好设置
在许多情况下,多语言用户会将其系统语言设置为某一种语言(例如英语),但又想为特定应用选择其他语言(例如荷兰语、中文或印地语)。为了帮助应用为这些用户提供更好的体验,Android 13 引入了一些 API,它们使应用可在运行时设置在界面中显示不同语言。
使用自定义应用内语言选择器的应用可以使用这些新 API 来减少显示应用内语言选择器所需的样板代码量。为了支持旧版 Android 平台,我们将在即将发布的 Jetpack 库版本中添加类似的 API。
不支持多种语言的应用不受这些变更的影响。
如需了解详情,请参阅按应用设定的语言偏好设置页面。
Unicode 库更新
Android 13 添加了一些最新改进、修复和变更,均包含在 Unicode ICU 70、Unicode CLDR 40 和 Unicode 14.0 中。
以下是两项显著变更:
- 英语(加拿大)
en‑CA
和英语(菲律宾)en‑PH
在无可用的翻译资源时均使用英语(美国)en
翻译资源,而非英语(英国)en‑GB
翻译资源。 - 针对西班牙语
es
、意大利语it
、葡萄牙语pt
和葡萄牙语(葡萄牙)pt‑PT
引入了many
复数类别。与 CLDR v38 中引入的法语类似,此类别适用于大数目。
10.更快断字
断字让分行的文本更易于阅读,并且有助于使界面更具自适应性。在 Android 13 中,我们将断字性能优化了多达 200%,因此您现在可以在 TextView
中启用断字功能,这几乎不影响渲染性能。如需启用更快断字功能,请在 setHyphenationFrequency() 中使用新的 fullFast 或 normalFast 频率。
11.前台服务 (FGS) 任务管理器
Android 13 允许用户从 通知抽屉停止 前台服务,无论目标 SDK 版本如何。这种称为 前台服务 (FGS) 任务管理器的新功能可显示当前正在运行前台服务的应用程序列表。此列表标记为Active apps。每个应用程序旁边都有一个停止按钮。图 1 说明了运行 Android 13 的设备上的 FGS 任务管理器工作流程:
图 1. Android 13 设备上的 FGS 任务管理器工作流程。
11.1用户操作会停止您的整个应用
当用户在 FGS 任务管理器中按下您的应用旁边的停止按钮时,您的整个应用都会停止,而不仅仅是正在运行的前台服务。
11.1.1将行为与“向上滑动”和“强制停止”用户操作进行比较
请参阅下表以查看 FGS 任务管理器与现有功能的比较:从“ 最近”屏幕“向上滑动”和 “强制停止”行为不端的应用程序。
FGS 任务管理器 | 向上滑动 | 强制停止 | |
---|---|---|---|
从历史中删除 | ✔ | ✔ | ✔ |
立即从内存中删除 | ✔ | ✔ | |
媒体播放停止 | ✔ | ✔ | |
FGS 已停止/相关通知已删除 | ✔ | ✔ | |
移除活动回栈 | ✔ | ✔ | |
计划的作业被取消 | ✔ | ||
警报被取消 | ✔ |
11.1.2用户从 FGS 任务管理器停止应用程序时不发送回调
当用户按下停止按钮时,系统不会向您的应用发送任何回调 。当您的应用程序启动备份时,检查现有API中的新REASON_USER_REQUESTED
原因 可能会对您有所帮助。ApplicationExitInfo
11.2与长期运行的前台服务相关的系统提示
如果系统检测到您的应用程序 长时间运行前台服务(24 小时窗口内至少 20 小时),系统会向用户发送通知,邀请他们与 FGS 任务管理器进行交互。
了解有关 提醒用户注意长期运行的前台服务的新系统通知的更多信息。
11.3豁免
系统为某些类型的应用程序提供了多个级别的豁免,以下部分将对此进行描述。
豁免是每个应用程序,而不是每个进程。如果系统免除了应用程序中的一个进程,则该应用程序中的所有其他进程也将被免除。
注意:即使应用程序预装在设备上,它也必须满足以下部分中的至少一组标准,才有资格获得豁免。
11.3.1完全不会出现在 FGS 任务管理器中
以下应用程序可以运行前台服务,并且根本不会出现在任务管理器中:
- 系统级应用
- 安全应用程序;也就是说,具有 ROLE_EMERGENCY角色的应用程序
- 处于 演示模式的设备
11.3.2免于被用户停止
当以下类型的应用程序运行前台服务时,它们会出现在 FGS 任务管理器中,但应用程序名称旁边没有停止按钮供用户按下:
- 设备所有者应用
- 个人资料所有者 应用
- 持久应用
- 具有该 ROLE_DIALER角色的应用
11.4测试
要测试您的应用在用户停止应用期间和之后的行为是否符合预期,请在终端窗口中运行以下 ADB 命令:
adb shell cmd activity stop-app PACKAGE_NAME
12.电池资源利用
Android 13 引入了以下电池保护措施:
- 更新了系统何时将您的应用放入“受限”应用备用存储桶的规则。
- 当用户将您的应用程序置于“受限”状态以使用后台电池时,您的应用程序可以执行的工作的新限制。
- 新的系统通知,警告用户 过度使用后台电池和 长期运行的前台服务。
12.1更新到应用程序何时进入“受限”应用程序备用存储桶
除非您的应用符合豁免条件,否则当您的应用出现以下任何行为时,系统会将您的应用置于受限存储桶中:
-
用户 8 天未与您的应用交互。如果用户与绑定到您应用的服务的另一个应用交互,则系统认为您的应用被“使用”。
注意:设备关闭的任何持续时间都不计入交互限制。
-
您的应用在 24 小时内调用了过多的 广播或 绑定。
-
您的应用会在 24 小时内消耗大量设备电池。对于低 RAM 设备,此阈值可能不同。
在衡量您的应用对设备电池寿命的影响时,系统会考虑您的应用在多个不同位置所做的工作,包括以下各项:
- 工作,包括加急工作
- 广播接收器
- 后台服务
- 系统是否 缓存了你应用的进程
12.1用户交互允许您的应用退出“受限”存储桶
当用户与您的应用程序交互时,包括以下方式,系统会将您的应用程序从受限存储桶中取出并放入不同的 App Standby Bucket:
-
用户点击您的应用发送的通知。
注意:如果用户在没有点击通知的情况下滑开通知,系统不会将该操作视为与您的应用程序的“交互”。
-
用户在属于您的应用程序的小部件中执行操作。
-
用户通过按下媒体按钮来影响您应用中的前台服务 。
-
用户在与Android Automotive OS交互时连接到您的应用 ,您的应用使用前台服务或 CONNECTION_TYPE_PROJECTION.
-
您的应用在画中画 (PiP) 模式下可见。
-
您的应用程序是屏幕上的活动应用程序之一。(主要适用于 大屏设备。)
12.2限制后台电池使用的新限制
注意:此更改仅在您的应用面向 Android 13 时生效。
现有版本的 Android 使用户能够调整应用程序在后台运行时可以执行的工作量。以下选项出现在系统设置中的电池使用页面中:
- 不受限制:允许后台工作,这可能会消耗更多电池。
- 优化(默认):根据用户与应用的交互方式优化应用执行后台工作的能力。
- 受限:优先考虑设备电池寿命而不是应用程序的多功能性。对应用程序可以在后台执行的操作设置更多限制。
注意:当用户将您的应用置于“受限”状态但随后启动您的应用时,系统会暂时将您的应用视为处于“优化”状态。当用户停止与您的应用交互并开始与另一个应用交互时,系统会将您的应用重新置于“受限”状态。
从 Android 9(API 级别 28)开始,处于“受限”状态的应用具有以下限制:
- 无法启动前台服务
- 从前台移除现有的前台服务
- 未触发警报
- 作业未执行
当您的应用以 Android 13 为目标平台时,系统不会提供以下任何广播,直到应用因其他原因启动:
BOOT_COMPLETED
LOCKED_BOOT_COMPLETED
12.3后台电池使用过多的系统通知
Android 13 引入了系统通知,当您的应用在 24 小时内消耗大量设备电池时会显示该通知。无论目标 SDK 版本如何,运行 Android 13 的设备上的所有应用都会显示此新通知。
注意:如果系统在应用显示与前台服务关联的通知时检测到您的应用的电池使用率过高,系统会等到用户关闭通知或前台服务完成,并且仅当您的应用显示通知继续消耗大量设备电池。
在衡量您的应用对设备电池寿命的影响时,系统会考虑您的应用在多个不同位置所做的工作,包括以下各项:
- 前台服务,甚至那些有可见通知的服务
- 工作任务,包括 加急工作
- 广播接收器
- 后台服务
- 您应用的 缓存
如果您的应用出现此通知,则至少要在 24 小时后才会在同一设备上再次出现。
12.4长期运行的前台服务的系统通知
如果系统检测到您的应用程序长时间运行前台服务(24 小时窗口内至少 20 小时),它会向用户发送通知,邀请他们与前台服务 (FGS) 任务管理器进行交互. 通知包含以下文本:
APP is running in the background for a long time. Tap to review.
注意:如果系统为您的应用显示此通知,则至少在 30 天后才会再次显示类似通知。
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK 如果前台服务类型为或 ,系统不会显示此通知 FOREGROUND_SERVICE_TYPE_LOCATION。
此外,如果您的应用程序在 24 小时内运行类型为 4 小时FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
或FOREGROUND_SERVICE_TYPE_LOCATION
超过 4 小时的前台服务,则系统不会为您的应用程序启动的任何前台服务发送长时间运行的通知。
12.5豁免
以下情况可免除应用程序在 Android 13 中引入的所有电池保护措施:
- 系统应用和系统绑定应用
- 配套设备应用
- 以演示模式在设备上运行的应用程序
- 设备所有者应用
- 个人资料所有者应用
- 持久应用
- VPN 应用程序
- 具有该ROLE_DIALER角色的应用
- 用户已明确指定在系统设置中提供“无限制”功能的应用
以下情况使您的应用免于进入“受限”应用备用存储桶,并且它们允许您的应用绕过 8 天不活动触发器:
- 有活动的小部件
- 至少被授予以下权限之一:
- SCHEDULE_EXACT_ALARM
- ACCESS_BACKGROUND_LOCATION
以下情况使您的应用免于 Android 13 中引入的大多数电池保护措施,但不会阻止系统为长时间运行的前台服务发送通知:
- 有一个正在进行的,活跃的 MediaSession
- 被授予 ACCESS_FINE_LOCATION 权限
12.6测试
以下部分介绍了几种测试 Android 13 中引入的电池保护措施如何影响您的应用的方法。
防止后台使用
要防止您的应用程序能够在后台运行,请在终端窗口中运行以下命令:
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND deny
将应用放入受限存储桶
要强制系统将您的应用程序放入受限存储桶,请在终端窗口中运行以下命令:
adb shell am set-standby-bucket PACKAGE_NAME restricted
13.通知运行时权限
Android 13 引入了一个新的 运行时权限,用于从应用 发送 非豁免POST_NOTIFICATIONS通知: . 此更改可帮助用户专注于对他们最重要的通知。
我们强烈建议您尽快以 Android 13 为目标,以从该功能的额外控制和灵活性中受益。如果您继续以 12L(API 级别 32)或更低版本为目标,您将失去在应用功能上下文中请求权限的机会。
13.1使用新权限
要从您的应用请求新的通知权限,请将您的应用更新为面向 Android 13 并完成与 请求其他运行时权限类似的过程,如以下部分所示。
您需要 在应用清单文件中声明的权限 显示在以下代码段中:
<manifest ...>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application ...>
...
</application>
</manifest>
13.2应用程序功能取决于用户在权限对话框中的选择
在此对话框中,用户可以使用以下操作:
- 选择允许
- 选择不允许
- 从对话框滑开,不按任何一个按钮
警告:如果用户点击不允许,即使只是一次,在他们卸载并重新安装您的应用程序之前,他们不会再次收到提示。
以下部分描述了您的应用程序的行为方式,具体取决于用户采取的操作。
13.2.1用户选择“允许”
如果用户选择允许选项,您的应用可以执行以下操作:
- 发送通知。 允许所有 通知渠道。
- 发布与前台服务相关的通知。这些通知出现在 通知抽屉中。
13.2.2用户选择“不允许”
如果用户选择不允许选项,您的应用将无法发送通知。除少数特定角色外,所有通知渠道均被阻止。这类似于用户在系统设置中手动关闭应用程序的所有通知时发生的行为。
13.2.3用户从对话框中滑开
如果用户从对话框滑开——也就是说,他们没有选择 允许或不允许——会发生以下行为:
- 如果您的应用程序有 资格获得临时通知权限授予,系统会保留临时授予。
- 如果您的应用没有临时授权,则您的应用无法发送通知。
13.3对新安装应用程序的影响
如果用户在运行 Android 13 的设备上安装您的应用,则默认情况下您的应用通知是关闭的。您的应用必须等到您请求新权限并且用户将该权限授予您的应用后才能发送通知。
权限对话框出现的时间取决于您应用的目标 SDK 版本:
- 如果您的应用面向 Android 13 或更高版本,则您的应用可以完全控制何时显示权限对话框。利用这个机会向用户解释为什么应用程序需要此权限,鼓励他们授予它。
- 如果您的应用面向 12L(API 级别 32)或更低版本,系统会在您创建第一个 通知通道时显示权限对话框。这通常在应用程序启动时。
13.4对现有应用程序更新的影响
注意:考虑以下情况:应用程序安装在运行 12L 或更低版本的设备上,用户正在丢弃,并且用户允许在该旧设备上发出通知。用户现在拥有一台运行 Android 13 并使用 备份和恢复 功能恢复应用程序的新设备。
在这种情况下,系统会将您的应用视为“现有应用”,因此您的应用会获得发送通知的临时权限。
为尽量减少与新通知权限相关的干扰,系统会自动将新通知权限临时授予在系统升级到 Android 13 之前已安装在用户设备上的所有 符合条件的应用。此临时授予的时长取决于您应用的目标 SDK 版本:
-
如果您的应用面向 Android 13 或更高版本,则临时授权将持续到您的应用首次启动 Activity 为止。
您的应用可以完全控制何时显示权限对话框。利用这个机会向用户解释为什么应用程序需要此权限,鼓励他们授予它。
-
如果您的应用程序以 12L 或更低为目标,则临时授权将持续到用户在通知权限运行时对话框中明确选择一个选项。这意味着如果用户在没有做出选择的情况下关闭权限提示,系统会为您的应用保留临时授权。
13.5临时许可授予的资格
要使您的应用程序有资格获得临时授权,它必须具有现有的通知渠道,并且用户在运行 12L 或更低容量的设备上未明确禁用其通知。
如果用户在运行 12L 或更低版本的设备上为您的应用禁用通知,则当设备升级到 Android 13 或更高版本时,该拒绝仍然存在。
13.6豁免
与媒体会话相关的通知 不受此行为更改的影响。
13.7Best practices
本节介绍了在应用中最有效地使用新通知权限的几种方法。
13.7.1更新应用的目标 SDK 版本
要让您的应用在出现权限对话框时具有更大的灵活性,请更新您的应用,使其面向 Android 13。
13.7.2等待显示通知权限提示
在您要求用户授予任何权限之前,让他们熟悉您的应用程序。
新用户可能希望探索应用程序并亲身体验每个单独通知请求的好处。您可以 从用户操作触发权限提示。以下列表显示了何时显示通知权限提示的好时机的几个示例:
- 用户点击“警报铃”按钮。
- 用户选择关注某人的社交媒体帐户。
- 用户提交送餐订单。
图 1 显示了请求通知权限的推荐工作流程。或者,您可以将请求设置为在应用程序启动时出现,但仅在应用程序启动第三次或第四次之后出现。
图 1.用于请求通知权限的推荐用户驱动工作流
13.7.3在上下文中请求许可
当您在应用程序中请求通知权限时,请在正确的上下文中执行此操作,以便明确说明通知的用途以及用户应该选择加入的原因。例如,电子邮件应用程序可能包含为每个新用户发送通知的选项电子邮件,或仅用户是唯一收件人的电子邮件。
利用这个机会让你的意图变得透明,用户更有可能向你的应用授予通知权限。
13.7.4检查您的应用是否可以发送通知
在您的应用发送通知之前,请确认用户是否为您的应用启用了通知。为此,请调用 areNotificationsEnabled()。
13.7.5负责任地使用权限
在您收到发送通知的批准后,请记住负责任地使用该权限。用户可以看到您的应用每天发送的通知数量,并且 他们可以随时撤销权限 。
最后
以上就是贪玩小猫咪为你收集整理的Android 13 功能和变更列表11.前台服务 (FGS) 任务管理器12.电池资源利用13.通知运行时权限的全部内容,希望文章能够帮你解决Android 13 功能和变更列表11.前台服务 (FGS) 任务管理器12.电池资源利用13.通知运行时权限所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复