android13系统适配注意点
官网地址:https://developer.android.com/about/versions/13/behavior-changes-13?hl=zh-cn
细分媒体权限
Android 13引入了媒体权限细分,将READ_EXTERNAL_STORAGE细分为IMAGES、VIDEO、AUDIO权限。根据需求动态申请。
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
WebView调整
废弃了setAppCacheEnabled与setForceDark方法。
WebView 现在始终会根据应用的主题属性 isLightTheme 来设置媒体查询 prefers-color-scheme。换句话说,如果 isLightTheme 为 true 或未指定,则 prefers-color-scheme 为 light;否则为 dark。此行为意味着,系统会自动应用 Web 内容的浅色或深色样式(如果相应内容支持应用主题)。
如果仍需要自定义应用的颜色主题行为,可以改用 setAlgorithmicDarkeningAllowed() 方法。为了向后兼容以前的 Android 版本,建议使用 AndroidX 中的等效 setAlgorithmicDarkeningAllowed() 方法。
静态广播注册变化
注册静态广播时,需设置对其他应用的可见性。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
IntentFilter filter = new IntentFilter();
filter.addAction(action);
context.registerReceiver(receiver, filter, Context.RECEIVER_EXPORTED);
} else {
IntentFilter filter = new IntentFilter();
filter.addAction(action);
context.registerReceiver(receiver, filter);
}
通知权限POST_NOTIFICATIONS
Android 13引入了一个新的运行时通知权限POST_NOTIFICATIONS,且需要动态申请。
<manifest ...>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application ...>
...
</application>
</manifest>
Wi-Fi的NEARBY_WIFI_DEVICES权限
新增了NEARBY_WIFI_DEVICES运行时权限。
<manifest ...>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application ...>
...
</application>
</manifest>
由于用户很难将位置信息权限与 Wi-Fi 功能相关联,因此 Android 13(API 级别 33)在 NEARBY_DEVICES 权限组中引入了运行时权限,适用于管理设备与附近 Wi-Fi 接入点连接情况的应用。此权限 (NEARBY_WIFI_DEVICES) 可满足以下 Wi-Fi 用例:
- 查找或连接到附近的设备,如打印机或媒体投射设备。通过该工作流,您的应用可以完成以下类型的任务:
– 通过带外方式(例如通过 BLE)接收 AP 信息。
– 使用仅限本地使用的热点,通过 Wi-Fi 感知和连接功能发现并连接到设备。
– 通过 Wi-Fi 直连发现和连接到设备。 - 发起与已知 SSID(例如汽车或智能家居设备)的连接。
- 开启仅限本地使用的热点。
- 连接到附近的 Wi-Fi 感知设备。
身体传感器后台权限
如果您的应用以 Android 13 为目标平台,并且在后台运行时需要访问身体传感器信息,那么除了现有的 BODY_SENSORS 权限外,您还必须声明新的 BODY_SENSORS_BACKGROUND 权限。
蓝牙连接
BluetoothAdapter#enable() 和 BluetoothAdapter#disable() 方法已废弃,并且始终会返回 false。以下类型的应用不受这些变更的影响:
设备所有者应用、资料所有者应用、系统应用。
电池资源利用率
如果用户因后台电池用量过高而将您的以 Android 13 为目标平台的应用置于“受限”状态,除非应用因其他原因启动,否则系统不会传送 BOOT_COMPLETED 广播或 LOCKED_BOOT_COMPLETED 广播。
非SDK限制
https://developer.android.google.cn/guide/app-compatibility/restrictions-non-sdk-interfaces?hl=zh-cn#test-for-non-sdk
Android 9(API 级别 28)或更高版本的设备或模拟器上构建和运行可调试应用来测试该应用是否使用非 SDK 接口。可以通过veridex和StrictMode API来进行测试。