我是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);
}
答案 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)
我遇到了同样的问题
我的解决方法:
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>