Flutter 下载\u路径\u提供程序-操作系统错误:权限被拒绝,错误号=13
我使用downloads\u path\u provider包写入下载目录。 我按照推荐的方式设置了它 创建AndroidManifest.xml项目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
<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卡呢?这是另一个你可以发布的问题,你可以将这个问题标记为接受,因为它解决了你的问题: