Flutter Android 获取完全的存储权限
前言
自己开发的一个APP,需要获得手机完全的存储权限,但由于 Android 在高版本中引入了分区存储的概念,所以需要的权限申请比较复杂。
分区存储
为了让用户更好地管理自己的文件并减少混乱,以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被授予了对外部存储空间的分区访问权限(即分区存储)。此类应用只能访问外部存储空间上的应用专属目录,以及本应用所创建的特定类型的媒体文件。
代码实现
在 AndroidManifest.xml
文件中,在 <application>
前加入以下权限,其中前两个是旧版本的权限,第三个是新加入的权限。
1 2 3
| <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
|
在 Flutter 中引入以下依赖:
1 2 3 4
| dependencies: flutter: sdk: flutter permission_handler: ^10.4.3
|
获取权限的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import 'package:permission_handler/permission_handler.dart';
Future<bool> _checkPermission() async { PermissionStatus status = await Permission.storage.status; if (status.isDenied) { PermissionStatus result = await Permission.storage.request(); if (result.isDenied) { return false; } } status = await Permission.manageExternalStorage.status; if (status.isDenied) { PermissionStatus result = await Permission.manageExternalStorage.request(); if (result.isDenied) { return false; } } return true; }
|
参考资料:
- 数据和文件存储概览 https://developer.android.google.cn/training/data-storage?hl=zh-cn