Flutter Android申请All files access权限报错解决方案咨询
问题根因
MANAGE_EXTERNAL_STORAGE权限是**Android 11(API级别30)**才正式引入的系统权限,Android 10(API29)及更低版本的系统不存在该权限,这就是你收到No permissions found in manifest for: []22报错、权限状态返回restricted的根本原因。
适配方案
你需要根据运行设备的Android版本分逻辑处理存储权限申请:
1. Android 10(API 29)适配
你不需要申请MANAGE_EXTERNAL_STORAGE,只要在AndroidManifest.xml的application节点添加android:requestLegacyExternalStorage="true"属性,申请传统的READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限即可获得全域存储读写能力。
修改后的application节点示例:
<application android:name="io.flutter.app.FlutterApplication" android:icon="@mipmap/ic_launcher" android:label="MAKE IT DAMN WORK" android:requestLegacyExternalStorage="true" tools:ignore="AllowBackup,GoogleAppIndexingWarning">
2. Android 11及以上版本适配
正常申请MANAGE_EXTERNAL_STORAGE权限即可,注意该权限申请会跳转到系统设置的「所有文件访问权限」页面,需要用户手动授权。
修改后的权限申请代码示例
需要先引入device_info_plus依赖用于判断系统版本,权限申请逻辑调整如下:
import 'package:device_info_plus/device_info_plus.dart'; Future<void> requestStoragePermission() async { final deviceInfo = DeviceInfoPlugin(); final androidInfo = await deviceInfo.androidInfo; if (androidInfo.version.sdkInt >= 30) { // Android 11及以上申请MANAGE_EXTERNAL_STORAGE if (!await Permission.manageExternalStorage.isGranted) { await Permission.manageExternalStorage.request(); } } else { // Android 10及以下申请传统存储权限 if (!await Permission.storage.isGranted) { await Permission.storage.request(); } } }
额外检查项
- 确认你的项目
android/build.gradle中的compileSdkVersion配置不低于30,否则系统无法识别MANAGE_EXTERNAL_STORAGE权限声明 - 执行完上述修改后重新运行
flutter clean+flutter pub get再打包测试
内容的提问来源于stack exchange,提问作者landfire13224
相关产品推荐
相关产品推荐

