Android-Android 13新特性

文章目录[x]
  1. 1:
  2. 2:所有应用
  3. 2.1:性能和电池
  4. 2.2:隐私权
  5. 3:以 Android 13 或更高版本为目标平台的应用
  6. 3.1:隐私权
  7. 3.2:性能和电池

所有应用

Android 13 平台包含一些可能会影响应用的行为变更。以下行为变更会影响在 Android 13 上运行的所有应用,无论采用哪种 targetSdkVersion 都不例外。应该测试应用,然后根据需要进行修改,以适当地支持这些变更。

性能和电池

任务管理器

从 Android 13(API 级别 33)开始,用户可以通过抽屉式通知栏完成工作流,以停止具有持续前台服务的应用。

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

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

在 Android 13(API 级别 33)及更高版本中,系统会尝试确定应用下次启动的时间,并根据该估算时间来运行预提取作业。应用应尝试使用预提取作业来完成他们想要在下次应用启动前完成的任何工作。

Android 13(API 级别 33)支持系统通过以下方式来更有效地管理设备电池续航时间:

隐私权

Android 13(API 级别 33)引入了运行时通知权限POST_NOTIFICATIONS。 此更改有助于用户专注于最重要的通知。

  注意:应用无需请求 POST_NOTIFICATIONS 权限即可启动前台服务。但是,应用必须在启动前台服务时提供一个通知,就像在以前的 Android 版本中一样。

如需向应用请求新的通知权限,请将应用更新为以 Android 13 为目标平台,并完成与请求其他运行时权限类似的流程,如以下几个部分所述。

需要在应用的清单文件中声明的权限会显示在以下代码段中:

<manifest ...>

<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

 

<application ...>
...
</application>
</manifest>

应用功能取决于用户在权限对话框中所做的选择,在此对话框中,用户可执行以下操作:

  • 选择允许:如果用户选择允许选项,应用可以执行以下操作:发送通知。可以使用所有通知渠道。发送与前台服务相关的通知。这些通知会显示在抽屉式通知栏中。
  • 选择不允许:如果用户选择不允许选项,应用将无法发送通知,除非该应用符合豁免条件。除了几个特定角色之外,所有通知渠道都会被屏蔽。这类似于用户在系统设置中手动关闭应用的所有通知后发生的行为。
  • 划开对话框,不按任何一个按钮:如果用户滑开对话框(即他们既没有选择允许,也没有选择不允许),通知权限的状态不会改变。

如果用户在搭载 Android 13 或更高版本的设备上安装应用,应用的通知默认处于关闭状态。在请求新权限且用户向应用授予该权限之前,应用必须等待系统发送通知。

如果应用允许用户将敏感内容(例如密码或信用卡信息)复制到剪贴板,则必须在调用 ClipboardManager#setPrimaryClip() 之前向 ClipData 的 ClipDescription 添加一个标志。添加此标志可阻止敏感内容出现在内容预览中。

如需标记敏感内容,请向 ClipDescription 添加一个布尔型 extra。无论应用的目标 API 级别如何,所有应用都应这么做。

 

// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}

// If your app is compiled with a lower SDK
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}

以 Android 13 或更高版本为目标平台的应用

隐私权

如果用户拒绝授予通知权限,就不会在抽屉式通知栏中看到与前台服务相关的通知。 不过,无论是否授予通知权限,用户仍会在任务管理器中看到与前台服务相关的通知。

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

在以前的 Android 版本中,用户需要向应用授予 ACCESS_FINE_LOCATION 权限,应用才能完成一些常见的 Wi-Fi 用例。

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

  • 查找或连接到附近的设备,如打印机或媒体投射设备。
  • 发起与已知 SSID(例如汽车或智能家居设备)的连接。
  • 开启仅限本地使用的热点。
  • 连接到附近的 Wi-Fi 感知设备。

只要应用不会通过 Wi-Fi API 推导物理位置,那么当以 Android 13 或更高版本为目标平台并使用 Wi-Fi API 时,就可以请求 NEARBY_WIFI_DEVICES 而不是 ACCESS_FINE_LOCATION。当声明 NEARBY_WIFI_DEVICES 权限时,请强烈断言应用绝不会通过 Wi-Fi API 推导物理位置信息。为此,请将 android:usesPermissionFlags 属性设置为 neverForLocation。此过程类似于在 Android 12(API 级别 31)及更高版本中声明绝不会将蓝牙设备信息用于获取位置信息的过程。

如果应用以 Android 13 或更高版本为目标平台,并且需要访问其他应用已经创建的媒体文件,必须请求以下一项或多项细化的媒体权限,而不是READ_EXTERNAL_STORAGE 权限:

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

在访问其他应用的媒体文件之前,请确认用户已向您的应用授予适当的精细媒体权限。

Android 13 中引入了“在使用时”访问身体传感器(例如心率、体温和血氧饱和度)的概念。此访问模式与 Android 10(API 级别 29)系统为位置信息引入的模式非常相似。

如果应用以 Android 13 为目标平台,并且在后台运行时需要访问身体传感器信息,那么除了现有的 BODY_SENSORS 权限外,还必须声明新的 BODY_SENSORS_BACKGROUND 权限。

性能和电池

如果用户因后台电池用量过高而将以 Android 13 为目标平台的应用置于“受限”状态,除非应用因其他原因启动,否则系统不会传送 BOOT_COMPLETED 广播或 LOCKED_BOOT_COMPLETED 广播。

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00