Android 13中READ_MEDIA_IMAGES权限在清单及MainActivity异常
解决Android 13(SDK 33)
READ_MEDIA_IMAGES权限问题:符号无法解析+权限无效 一、搞定"无法解析符号READ_MEDIA_IMAGES"
- 先确认你的Android SDK Build Tools版本≥33.0.0,这个权限是Android 13新增的,旧版本工具不识别它。
- 把项目的
compileSdkVersion和targetSdkVersion都设为33,修改Gradle配置:android { compileSdkVersion 33 defaultConfig { targetSdkVersion 33 // 其他配置保持不变 } } - 同步Gradle后,检查导入的Manifest包是否为
android.Manifest,别导错成support库的版本。
二、权限添加后无效的解决步骤
必须动态申请权限:Android 13的媒体权限属于危险权限,仅在Manifest声明没用,得在代码里主动申请:
// 先检查权限是否已授予 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_MEDIA_IMAGES) != PackageManager.PERMISSION_GRANTED) { // 注册权限申请回调 ActivityResultLauncher<String> requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> { if (isGranted) { // 权限获取成功,执行图片加载逻辑 } else { // 权限被拒绝,可提示用户开启权限或走降级处理 } }); requestPermissionLauncher.launch(Manifest.permission.READ_MEDIA_IMAGES); }WebView额外配置:作为WebView应用,要访问本地图片还得开启WebView的文件访问权限:
WebSettings webSettings = webView.getSettings(); webSettings.setAllowFileAccess(true); webSettings.setAllowContentAccess(true);如果用
file://协议加载图片,需等权限申请通过后再重新加载页面,否则WebView无法读取文件。兼容旧版本系统:若需支持Android 12及以下,Manifest要同时声明旧权限,并做版本判断:
<!-- Android 12及以下使用的权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/> <!-- Android 13使用的权限 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>动态申请时区分系统版本:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // Android 13及以上申请READ_MEDIA_IMAGES } else { // Android 12及以下申请READ_EXTERNAL_STORAGE }
内容的提问来源于stack exchange,提问作者Abdullah Chowdhury
相关产品推荐
相关产品推荐

