繁体   English   中英

Flutter Android 11 权限如 WhatsApp

[英]Flutter Android 11 permissions like WhatsApp

我正在尝试构建一个在 Android 11 上运行并下载文件的 Flutter 应用程序。 我曾经通过管理外部存储权限来实现这一点,但是当应用程序请求权限时,它会直接进入设置,而不是在应用程序内请求允许或拒绝。

例如,WhatsApp 将数据存储在android/media文件夹中,但它直接在应用程序内请求权限,而不是转到设置页面。 请参考以下图片:

我的应用程序进入这样的设置/我需要这样的东西

我的权限处理代码

Future<bool> requestPermission() async {
  var androidInfo = await DeviceInfoPlugin().androidInfo;
  var release = int.parse(androidInfo.version.release);
  Permission permission;
  if (release < 11) {
    permission = Permission.storage;
  } else {
    permission = Permission.manageExternalStorage;
  }
  if (await permission.isGranted) {
    return true;
  } else {
    var result = await permission.request();
    if (result == PermissionStatus.granted) {
      return true;
    } else {
      return false;
    }
  }
}

这是管理Android 11及更高版本的 Android 设备中外部存储访问的两种不同方法。

文件 Go 正在尝试访问all files access permission 这使应用程序可以访问任何读取、写入、访问和共享用户存储(外部或内部)中存在的所有文件。 您可以从此处阅读有关所有文件访问权限的更多信息 - 管理存储设备上的所有文件

WhatsApp - 不是要求all files access permission ,而是将其媒体保存在文件目录中。 保存在文件或缓存目录中不需要访问所有苍蝇,一个简单的权限对话框来写入和读取存储就可以完成任务。

您可以在getExternalFilesDir中阅读更多相关信息。

注意:这仅适用于您的 targetSdkVersion 为 30 的情况。针对 29 或以下版本,不需要all files permission ,因为它由系统处理。

您可以参考Android 11 中存储更新中的存储更新并根据您的用例请求权限。

即使您使用的是 Android 11 或更高版本,我们也必须在 Flutter 中询问存储权限而不是管理外部存储权限。我尝试将文件写入“android/media/packagename/”并且它工作正常,但是当我尝试写入其他位置它不起作用。 我认为 Android 内部以某种方式允许仅在同一个 package 中存储数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM