Android 13 新功能和行为变更

293 阅读5分钟

新功能

提高了启动画面效率

Android 13 提高了 Splash Screen API 中的动画启动画面的效率:

  • 系统会直接从 AnimatedVectorDrawable 推断动画时长。在 Android 13 之前,必须直接设置 windowSplashScreenAnimationDuration。

  • 使用新的 windowSplashScreenBehavior 属性可以更好地控制应用是否始终在 Android 13 及更高版本中的启动画面上显示该图标。

照片选择器

Android 13(API 级别 33)及更高版本引入了照片选择器 体验。应用启动照片选择器时,用户可选择与应用分享特定图片和视频(如个人资料照片),而不是授予应用查看整个媒体库的权限。这是访问用户照片和视频的建议方法。

照片选择器可为用户提供更好的隐私保护,因为您的应用无需声明任何运行时权限。此外,照片选择器还为应用提供内置标准化界面,从而打造更一致的用户体验。

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

如果应用以 Android 13(API 级别 33)或更高版本为目标平台并管理 Wi-Fi 连接,则应请求 NEARBY_WIFI_DEVICES 运行时权限。此权限可让您更轻松地证明应用访问附近的 Wi-Fi 设备的正当理由;在以前的 Android 版本中,这些应用需要改为声明 ACCESS_FINE_LOCATION 权限。

即使您的应用以 Android 13 或更高版本为目标平台,一些 Wi-Fi API 也需要 ACCESS_FINE_LOCATION 权限。例如,WifiManager 类中的以下方法:

  • getScanResults()
  • startScan()

使用精确闹钟的新权限

如果您的应用以 Android 13 或更高版本为目标平台,您可以使用自动授予应用的 USE_EXACT_ALARM 权限。不过,您的应用若要使用此权限,必须至少满足以下条件之一:

  • 您的应用是闹钟应用或计时器应用。
  • 您的应用是日历应用,可显示即将进行的活动的通知。

如果您的应用设置了精确闹钟,但不符合前面列表中显示的任一情况,请改为继续声明 SCHEDULE_EXACT_ALARM 权限,并为用户拒绝授予您应用相应访问权限的情况做好准备

APK 签名方案 v3.1

Android 13 可支持 APK 签名方案 v3.1,此方案在现有的 APK 签名方案 v3 的基础上进行了改进,该方案解决了 APK 签名方案 v3 在轮替方面的一些已知问题。具体而言,v3.1 签名方案支持 SDK 版本定位功能,这会允许轮替定位到平台的更高版本。

OpenJDK 11 更新

Android 13 开始刷新 Android 的核心库,以与 OpenJDK 11 LTS 版本保持一致,并增添了适合应用和平台开发者的库更新和 Java 11 语言支持。

其它

更多新功能请参考官方文档:功能和 API 概览

行为变更

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

行为变更:所有应用

通知的运行时权限

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

从剪贴板中隐藏敏感内容

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

// 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(API 级别 33)开始,默认情况下,用户可以关闭与前台服务相关联的通知。为此,用户可以在通知上做出滑动手势。一直以来,除非停止前台服务或从前台移除,否则通知不会被关闭。

如果您希望用户不可关闭该通知,请在使用 Notification.Builder 创建通知时将 true 传入 setOngoing() 方法。

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

与早期版本一样,Android 13 包含一些行为变更,这些变更可能会影响您的应用。以下行为变更仅影响以 Android 13 或更高版本为目标平台的应用。如果您的应用以 Android 13 或更高版本为目标平台,您应该修改自己的应用以适当地支持这些行为(如果适用)。

通知权限会影响前台服务的显示

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

细化的媒体权限

如果您的应用以 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 或更高版本为目标平台的应用