如何解决OS错误:权限被拒绝,errno = 13

时间:2020-03-06 06:20:22

标签: flutter

我是Flutter的新手。我想将文档文件存储到'/ storage / emulated / 0 / Download /'中。我有关于Unhandled Exception: FileSystemException: Cannot open file, path = '/storage/emulated/0/Download/file.pdf' (OS Error: Permission denied, errno = 13)

的错误

这是我的代码:

void download() async {
http.Response response = await http.post(url, headers: {"Accept": "application/json", HttpHeaders.authorizationHeader: 'Bearer}});

  File file = new File('/storage/emulated/0/Download/file.pdf');
  await file.writeAsBytes(response.bodyBytes);
}

8 个答案:

答案 0 :(得分:13)

在Android Q中,您需要在AndroidManifest文件中添加以下行:

 <application
      android:requestLegacyExternalStorage="true"

答案 1 :(得分:12)

如果您使用的是 android 10/Q,只需将以下行添加到您的 android manifest 中

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
   <application
        android:requestLegacyExternalStorage="true"
    >

答案 2 :(得分:9)

我遇到了同样的问题

我的解决方法:

使用permission_handler

import 'package:permission_handler/permission_handler.dart';

在执行下载操作之前,您需要检查存储权限:

var status = await Permission.storage.status;
                  if (!status.isGranted) {
                    await Permission.storage.request();
                  }

希望能帮助身体

答案 3 :(得分:2)

确保像这样在AndroidManifest file中定义权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxx.yyy">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
...
</manifest>

有关更多信息,请尝试使用this链接

答案 4 :(得分:2)

除了Rajil TL的答案外,还包括

targetSdkVersion 28

并停止进程并运行该应用程序。热重装不足以反映build.gradle的变化。

答案 5 :(得分:0)

我在 Galaxy s9 上遇到过这个问题。我无法使用上次使用的图片 - 我必须点击顶部的 galary 和 fotos 选项卡,然后应用程序再次请求许可,然后它才起作用。 也许有人会需要这些信息

答案 6 :(得分:0)

在我的情况下,没有一个解决方案有效,最后有效的是从 android/app/build.gradle 中删除 defaultConfig 中对“targetSdkVersion XX”的引用{}

现在一切都按预期工作了,我猜这是框架中的一个错误。

答案 7 :(得分:0)

您必须在 AndroidManifest.xml 文件中添加 android:requestLegacyExternalStorage="true"

<application 
android:label="app_name"
        android:icon="@mipmap/ic_launcher"
        android:requestLegacyExternalStorage="true"
 </application>