Flutter 下载\u路径\u提供程序-操作系统错误:权限被拒绝,错误号=13

Flutter 下载\u路径\u提供程序-操作系统错误:权限被拒绝,错误号=13,flutter,Flutter,我使用downloads\u path\u provider包写入下载目录。 我按照推荐的方式设置了它 创建AndroidManifest.xml项目 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.user.myappname"> <uses-permission android:name="android.permission.READ_EXT

我使用downloads\u path\u provider包写入下载目录。 我按照推荐的方式设置了它 创建AndroidManifest.xml项目

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.user.myappname">
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="Secure Storage"
        ...
但是当我试图写的时候,我得到了这个错误 E/flatter 26091:[错误:flatter/lib/ui/ui_dart_state.cc157]未处理的异常:FileSystemException:无法打开文件,路径='/storage/emulated/0/Download/secure strorage backup.txt'操作系统错误:权限被拒绝,错误号=13

这是密码

  final file = _localFile;
  file.writeAsString('1234  5678\n');
  file.writeAsString('1234  5678\n');

  File get _localFile {
    final path = _downloadsDirectory.path;
    return File('$path/secure-strorage-backup.txt');
  }
如何写入下载文件夹

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.user.myappname">
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="Secure Storage"
        ...
这是我下载目录的方式

  void initState() {
    super.initState();
    initDownloadsDirectoryState();
  }

  Future<void> initDownloadsDirectoryState() async {
    Directory downloadsDirectory;
    try {
      downloadsDirectory = await DownloadsPathProvider.downloadsDirectory;
    } on PlatformException {
      print('Could not get the downloads directory');
    }
    if (!mounted) return;
    setState(() {
      _downloadsDirectory = downloadsDirectory;
    });
  }
正如在回答中提到的,您还需要明确地向您的用户请求使用外部存储的权限,您可以为此使用软件包

更新:

软件包变得更好,并且有更好的分数,您可以这样使用它:

                  await Permission.storage.request();
                  Directory downloadsDirectory = await DownloadsPathProvider.downloadsDirectory;
                  final String path = downloadsDirectory.path;
                  final File file = File('$path/secure-strorage-backup.txt');
                  await file.writeAsString('1234  5678\n');
                  await file.writeAsString('1234  5678\n');
                  print(await file.readAsString());
正如在回答中提到的,您还需要明确地向您的用户请求使用外部存储的权限,您可以为此使用软件包

更新:

软件包变得更好,并且有更好的分数,您可以这样使用它:

                  await Permission.storage.request();
                  Directory downloadsDirectory = await DownloadsPathProvider.downloadsDirectory;
                  final String path = downloadsDirectory.path;
                  final File file = File('$path/secure-strorage-backup.txt');
                  await file.writeAsString('1234  5678\n');
                  await file.writeAsString('1234  5678\n');
                  print(await file.readAsString());

当我做到这一点时,出现了新的错误。失败:生成失败,出现异常。*错误:任务执行失败:简单权限:CompiledBugJavaWithJavaC'>编译失败;有关详细信息,请参阅编译器错误输出。以及*出了什么问题:配置根项目“下载\路径\提供程序”时出现问题。>未找到SDK位置。使用local.properties文件中的sdk.dir或ANDROID_HOME环境变量定义位置。只需使用另一个软件包,第一个软件包看起来已经被其原始创建者弃用,我尝试了第二个,效果非常好!如果我需要写SD卡呢?这是另一个你可以发布的问题,你可以将这个问题标记为接受,因为它解决了你的问题:当我写的时候,出现了新的错误。失败:生成失败,出现异常。*错误:任务执行失败:简单权限:CompiledBugJavaWithJavaC'>编译失败;有关详细信息,请参阅编译器错误输出。以及*出了什么问题:配置根项目“下载\路径\提供程序”时出现问题。>未找到SDK位置。使用local.properties文件中的sdk.dir或ANDROID_HOME环境变量定义位置。只需使用另一个软件包,第一个软件包看起来已经被其原始创建者弃用,我尝试了第二个,效果非常好!如果我需要写SD卡呢?这是另一个你可以发布的问题,你可以将这个问题标记为接受,因为它解决了你的问题: