Android 13(API 33)
于 2022年8月15日
正式发布(发布时间较往年早了一些),正式版Release源代码也于当日被推送到AOSP Android开源项目。
截止到笔者撰写这篇文章时,国内部分应用软件开发厂商已逐步接到手机厂商(华米OV等)的新版本适配要求。当前,对于Android应用开发者来说,Android 13 的软件兼容适配已需提上工作日程。
为了贴合这篇文章的标题,本篇文章结合Android Developer官方文档,围绕Android13适配点
与Android13新特性
两个方面进行详细说明。
适配点:
- 细分媒体权限:
将READ_EXTERNAL_STORAGE
细分为IAMGES、VIDEO、AUDIO权限
(若设置 targetSdk>=33 则此项必需适配!
) - WebView调整:
废弃setAppCacheEnabled
与setForceDark
方法;
(若设置 targetSdk>=33 则此项必需适配!
) - 静态广播注册:
注册静态广播
时,需设置对其他应用的可见性
(若设置 targetSdk>=33 则此项必需适配!
) - 通知权限:
新增运行时通知权限:POST_NOTIFICATIONS
(若设置 targetSdk>=33 则此项必需适配!
) - Wi-Fi :
新增NEARBY_WIFI_DEVICES
运行时权限
(若设置 targetSdk>=33 则此项必需适配!
) - 身体传感器后台权限:
新增BODY_SENSORS_BACKGROUND
运行时权限
(若设置 targetSdk>=33 则此项必需适配!
) - 剪切板内容隐藏:
新增内容隐藏API
(根据业务需求,选择性适配!
) - 非 SDK 接口的限制
(若设置 targetSdk>=33 则此项必需适配!
)
新特性:
- 前台服务管理器:
系统新增前台服务管理器
(系统新特性无需适配!
)
一、细分媒体权限
从Android 13开始,以Android13(API 33+)为目标平台的应用
,系统新增
运行时权限READ_MEDIA_IAMGES
、READ_MEDIA_VIDEO
、READ_MEDIA_AUDIO
替代
原有的READ_EXTERNAL_STORAGE
权限。
权限 | 权限说明 |
---|---|
READ_MEDIA_IAMGES | 图片权限 |
READ_MEDIA_VIDEO | 视频权限 |
READ_MEDIA_AUDIO | 音频权限 |
当应用升级到targetSdk>=33
时:
- 已授权
READ_EXTERNAL_STORAGE
权限的应用:系统将自动赋予对应的细化权限。 - 未授权仍请求
READ_EXTERNAL_STORAGE
权限:亲测系统将不会授予任何权限。
细分媒体权限动态申请弹窗样式:
- 如果同时请求
READ_MEDIA_IMAGES
和READ_MEDIA_VIDEO
权限,系统将会提示如下权限弹窗:
- 如果请求
READ_MEDIA_AUDIO
权限,系统将提示如下弹窗:
官方参考:
Android Developer 细分媒体权限:
https://developer.android.google.cn/about/versions/13/behavior-changes-13
二、WebView
从Android 13开始,以Android13(API 33+)为目标平台的应用
,WebView存在以下方法与API调整:
WebSettings.setAppCacheEnabled()
方法废弃
。WebSettings.setForceDark()
方法废弃
。
2.1 setAppCacheEnabled 废弃
WebView 95+版本不再支持 setAppCacheEnabled
2.2 setForceDark 废弃
从Android 13开始以Android13(API 33+)为目标平台的应用
,系统会根据应用的主题属性isLightTheme,自动设置WebView的浅色或深色主题样式(系统会根据 isLightTheme 来设置 prefers-color-scheme)。同时,开发者Webview设置主题样式相关API WebSettings.setForceDark()
方法将被废弃。
基于以上更改:
- 若开发者仍需自定义Webview主题颜色,可以使用:
WebSettings.setAlgorithmicDarkeningAllowed()
或WebSettingsCompat.setAlgorithmicDarkeningAllowed()
方法。 - 若开发者仍然使用
WebSettings.setForceDark()
系统将提示错误:
W/cr_WebSettings: setForceDark() is a no-op in an app with targetSdkVersion>=T
官方参考:
Android Developer 静态广播注册官方介绍:
https://developer.android.google.cn/about/versions/13/behavior-changes-13
三、静态广播注册
从Android 13开始,以Android13(API 33+)为目标平台的应用
,注册静态广播
时,需设置对其他应用的可见性
:
若对其他应用可见
,广播注册时设置:Context.RECEIVER_EXPORTED
若仅应用内使用
,广播注册时设置:Context.RECEIVER_NOT_EXPORTED
private void registerTestReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction("com.xiaxl.test.action");
// api >= 33
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// 跨应用间使用
MainActivity.this.registerReceiver(mTestReceiver, filter, Context.RECEIVER_EXPORTED);
// 应用内使用
//MainActivity.this.registerReceiver(mTestReceiver, filter, Context.RECEIVER_EXPORTED);
}
// api <= 32
else {
MainActivity.this.registerReceiver(mTestReceiver, filter);
}
}
官方参考:
Android Developer 静态广播注册官方介绍:
https://developer.android.google.cn/about/versions/13/features#java
四、通知权限
Android 13 引入了一种新的运行时通知权限:POST_NOTIFICATIONS
。
POST_NOTIFICATIONS
权限级别被定义为dangerous
开发者使用该权限时需动态申请
,等待用户主动授权:
- 对于以
Android13(API 33+)为目标平台的