侧边栏壁纸
  • 累计撰写 25 篇文章
  • 累计创建 11 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Flutter Android 获取完全的存储权限

LinJHS
2023-09-06 / 0 评论 / 0 点赞 / 40 阅读 / 2788 字 / 正在检测是否收录...

Flutter Android 获取完全的存储权限

前言

自己开发的一个APP,需要获得手机完全的存储权限,但由于 Android 在高版本中引入了分区存储的概念,所以需要的权限申请比较复杂。

分区存储

为了让用户更好地管理自己的文件并减少混乱,以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被授予了对外部存储空间的分区访问权限(即分区存储)。此类应用只能访问外部存储空间上的应用专属目录,以及本应用所创建的特定类型的媒体文件。

代码实现

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;
  }

参考资料:

  1. 数据和文件存储概览 https://developer.android.google.cn/training/data-storage?hl=zh-cn
0

评论区