Flutter无需MANAGE_EXTERNAL_STORAGE权限实现指定文件夹读写方案咨询
关于Flutter中选择文件夹并获取读写权限的方案
完全可以通过**Storage Access Framework(SAF)**或合规的Flutter文件选择器包实现需求,无需使用受Play Store严格限制的MANAGE_EXTERNAL_STORAGE权限,具体方案如下:
一、基于SAF的原生实现思路
- 调用Android系统的SAF文件夹选择Intent,引导用户手动选择目标文件夹
- 获取选中文件夹的
Uri后,通过ContentResolver调用takePersistableUriPermission申请持久化读写权限,后续重启应用后仍可访问该文件夹 - 读写操作通过SAF的
DocumentFileAPI完成,无需申请额外的存储权限
二、Flutter第三方包快速实现
推荐使用file_picker包,它已封装了SAF的调用逻辑,无需手动处理原生代码:
- 添加依赖到
pubspec.yaml:
dependencies: file_picker: ^6.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
相关产品推荐
相关产品推荐

