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

Flutter无需MANAGE_EXTERNAL_STORAGE权限实现指定文件夹读写方案咨询

关于Flutter中选择文件夹并获取读写权限的方案

完全可以通过**Storage Access Framework(SAF)**或合规的Flutter文件选择器包实现需求,无需使用受Play Store严格限制的MANAGE_EXTERNAL_STORAGE权限,具体方案如下:

一、基于SAF的原生实现思路

  • 调用Android系统的SAF文件夹选择Intent,引导用户手动选择目标文件夹
  • 获取选中文件夹的Uri后,通过ContentResolver调用takePersistableUriPermission申请持久化读写权限,后续重启应用后仍可访问该文件夹
  • 读写操作通过SAF的DocumentFile API完成,无需申请额外的存储权限

二、Flutter第三方包快速实现

推荐使用file_picker包,它已封装了SAF的调用逻辑,无需手动处理原生代码:

  1. 添加依赖到pubspec.yaml:
dependencies:
  file_picker: ^6.1.1
  1. 调用文件夹选择并进行读写操作的示例代码:
import 'package:file_picker/file_picker.dart';
import 'dart:io';

Future<void> pickAndAccessFolder() async {
  // 调用SAF选择文件夹
  final folderPath = await FilePicker.platform.getDirectoryPath();
  
  if (folderPath != null) {
    // 直接读写该文件夹下的文件(已通过SAF获得授权)
    final testFile = File('$folderPath/test_file.txt');
    await testFile.writeAsString('SAF授权下的文件写入测试');
    
    final content = await testFile.readAsString();
    print(content);
  }
}

该方案完全符合Play Store的政策要求:用户主动选择文件夹,应用仅获得该特定文件夹的读写权限,而非全局存储访问权限。

内容的提问来源于stack exchange,提问作者Adarsh Tiwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:32:35