如何解决Android Studio中“Cannot resolve symbol READ_EXTERNAL_STORAGE”错误?
解决READ_EXTERNAL_STORAGE无法解析的问题
核心修复步骤
1. 导入正确的系统权限包
代码中引用Manifest.permission.READ_EXTERNAL_STORAGE时,必须导入系统级的android.Manifest包,而非项目自定义的Manifest。在MainActivity.java顶部添加:
import android.Manifest;
如果误导入了项目包(如com.your.app.Manifest),IDE会找不到系统定义的权限常量,导致无法解析错误。
2. 适配Android版本权限变化
从Android 13(API 33)开始,READ_EXTERNAL_STORAGE被拆分为媒体细分权限,需根据targetSdkVersion调整:
- 若targetSdkVersion ≥33,读取音频文件改用
READ_MEDIA_AUDIO,图片/视频对应READ_MEDIA_IMAGES/READ_MEDIA_VIDEO - 兼容低版本时,在代码中做版本判断:
boolean checkPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // Android 13+ 读取音频权限 int result = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_MEDIA_AUDIO); return result == PackageManager.PERMISSION_GRANTED; } else { // 低版本使用READ_EXTERNAL_STORAGE int result = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); return result == PackageManager.PERMISSION_GRANTED; } }
同时在AndroidManifest.xml中对应声明:
<!-- Android 13+ 音频权限 --> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <!-- 兼容Android 12及以下版本 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
3. 修复方法语法错误
你的requestPermission方法声明返回boolean但无return语句,这会引发编译错误,同时干扰IDE语法检查,建议修正:
void requestPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_MEDIA_AUDIO}, 123); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 123); } }
4. 同步项目并清理缓存
若以上操作后错误仍存在,执行:
- 点击菜单栏
File -> Sync Project with Gradle Files - 清理缓存:
File -> Invalidate Caches... -> 选择Invalidate and Restart
内容的提问来源于stack exchange,提问作者Tushar Kumar Singh
相关产品推荐
相关产品推荐

