You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:45:03