Android [2,6)
在早期版本的安卓系统中,应用程序可以自由地访问设备上的所有文件和目录,没有任何限制。
直接在清单中写清读写权限。
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />
Android [6, 10)
随着 Android 6.0 的发布,Google 引入了一种称为“运行时权限”的新的权限管理方式,允许用户在运行时授予或拒绝应用程序对特定权限的访问请求。这些权限包括存储空间、照相机、麦克风等。
动态申请读写权限。
List<Permission> permissions = [
Permission.storage
];
permissions.request();
Android [10, 12]
在 Android 10 中,Google 进一步加强了文件访问权限的管理,引入了一种新的存储访问框架,称为 Scoped Storage(作用域存储)。Scoped Storage 强制应用程序访问其私有文件和存储目录,同时通过使用新的 MediaStore API,应用程序可以访问公共存储空间中的音频、视频和图像文件。
对于 Android 10 版本你可以像下面这样在清单中声明使用旧代的权限制度:
android:requestLegacyExternalStorage="true"
对于 10~13 版本,
在And使用 SAF (Storage Access Framework, 存储访问框架),来申请对某个文件夹的读写权限。
import 'package:saf/saf.dart';
bool? isGranted = await Saf(_dir).getDirectoryPermission();
暴力
对于 Android [6, 12]
,你可以无视谷歌所有的文件访问的策略,直接在清单中声明 MANAGE_EXTERNAL_STORAGE
,表明你希望获取对 EXTERNAL_STORAGE
的所有文件的访问权限。
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
然后动态申请权限
List<Permission> permissions = [
Permission.manageExternalStorage,
];
permissions.request();