Android Studio中无法添加READ/WRITE_EXTERNAL_STORAGE权限求助
解决Android Studio中无法引用READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE权限的问题
1. 确认权限常量的正确导入
确保代码中导入系统原生权限类,避免混淆其他包下的同名常量:
import android.Manifest;
之后直接使用Manifest.permission.READ_EXTERNAL_STORAGE和Manifest.permission.WRITE_EXTERNAL_STORAGE即可,不要手动拼写权限字符串(易出错)。
2. 适配Android 13+的权限变更
如果项目targetSdkVersion设置为33或更高,Android系统已将传统存储权限拆分为媒体文件权限:
- 读取图片/视频/音频:
READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO - 写入媒体文件:Android 13+无需单独申请
WRITE_EXTERNAL_STORAGE,默认拥有写入媒体库的权限 - 访问非媒体文件:需申请
MANAGE_EXTERNAL_STORAGE权限(需引导用户到系统设置开启)
代码中可通过版本判断兼容新旧系统:
String[] requiredPermissions; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // Android 13+ 适配媒体权限 requiredPermissions = new String[]{ Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.READ_MEDIA_VIDEO }; } else { // Android 12及以下使用传统存储权限 requiredPermissions = new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; }
3. 清理Android Studio缓存
IDE缓存异常可能导致无法识别权限常量,执行以下操作:
- 点击顶部菜单栏
File→Invalidate Caches... - 选择
Invalidate and Restart,等待IDE重启完成
4. 检查Manifest权限声明的正确性
确保权限声明在<manifest>标签下、<application>标签外,且针对高版本系统做限制:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Android 12及以下的存储权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <!-- Android 13+的媒体权限(按需添加) --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <application ...> ... </application> </manifest>
5. 手动输入权限常量
如果IDE未自动提示旧版存储权限,可手动完整输入Manifest.permission.READ_EXTERNAL_STORAGE,系统编译时会正常识别(即使targetSdk为33+,旧权限仍具备兼容性)。
内容的提问来源于stack exchange,提问作者Kumar Abhishek
相关产品推荐
相关产品推荐

