前言

自己开发的一个Flutter APP,需要获得手机完全的存储权限,但由于 Android 在高版本中引入了[分区存储](https://linjhs.top/archives/partition-storage-introduction)的概念,所以需要的权限申请比较复杂。

代码实现

AndroidManifest.xml 文件中,在 <application> 前加入以下权限,其中前两个是旧版本的权限,第三个是新加入的权限。

    <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 中引入以下依赖:

dependencies:
  flutter:
    sdk: flutter
  permission_handler: ^10.4.3

获取权限的代码如下:

// 引入以下包
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;
  }