操作系统错误:不允许操作,errno = 1),即使使用 MANAGE_EXTERNAL_STORAGE

问题描述 投票:0回答:1

我有一个可以生成一些 PDF 和 CSV 文件的应用程序,目前我将这些文件保存到 Android 手机应用程序目录中的

files
文件夹中。然后用户需要手动将文件移动到另一个文件夹(例如文档或下载)。

我想在应用程序生成文件后,在运行时自动将文件保存到文档或下载文件夹(两者之一,相同)。目标设备具有 Android 11,因此我在管理外部存储方面遇到任何问题。

Android 清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.app.example">
    <!-- PERMISSIONS -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
...
...

启动时请求的权限:

  requestPermissions() async {
    try {
      await [
        Permission.storage,
        Permission.manageExternalStorage,
      ].request();
    } catch (e) {
      LoggerService().error("PERMISSIONS REQUEST ERROR", e.toString());
    }
  }

文件保存方法:

  Future<String> export(Uint8List pdf, {String? fileName}) async {
    Directory dir = Directory(EnvironmentService.documentsPath);
    String path = "${dir.path}/${fileName ?? "${uuid.v4()}.pdf"}";
    File file = File(path);
    await file.writeAsBytes(pdf);
    return path;
  }

我尝试保存文件的路径:

static const String documentsPath = "/storage/emulated/0/Documents";

保存文件时,即使我已授予

OS Error: Operation not permitted, errno = 1)
权限,我总是收到
MANAGE_EXTERNAL_STORAGE
错误。该应用程序不会在 Play 商店上发布,并且只需要在 Android 上运行。

知道发生了什么吗?

android flutter permissions storage
1个回答
0
投票

您需要向用户请求在 XML 文档中写入的许可。但你不能使用 Flutter 来要求它们,它必须通过 Android 代码来完成。为此,您需要执行以下步骤:

1.- 在 Android 和 Flutter 之间创建通道。 2.- 使用该通道调用请求该权限的 Android 函数。 3.- 用户必须启用该权限。

这是执行此操作的 GIT 存储库:

https://github.com/igarleni/flutter_manage_external_storage

希望对你有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.