在Android 10及更高版本中使用Flutter创建新的可共享文本文件

问题描述

从API 29(Android 10)开始,引入了Scoped Storage。早些时候,我能够直接创建一个可共享文件,并在 Flutter 中使用它写入文件:

File f = File("/storage/emulated/0/MyApp/myFile.txt");
await f.writeAsString(contents);

但是对于privacy changes来说,即使我已授予存储权限,在Android 10中似乎也无法做到这一点。

根据documentation

将所有共享的非媒体文件移动到Downloads /目录的应用专用子目录中。

我的问题是:

  • 我仍然可以在/storage/emulated/0/MyApp/myFile.txt中创建文件吗?
  • 如果没有,那么我可以直接在Flutter中用/storage/emulated/0/Download/MyApp/myFile.txt在没有平台代码的情况下创建文件吗?
  • 如果我需要使用特定于平台的代码,using file picker是txt文件的唯一选项吗?

不想也不想使用android:requestLegacyExternalStorage="true",因为那样我的应用将无法在Android 11上运行。

解决方法

不幸的是,Flutter 中似乎还没有实现这一点,以解释新的范围存储更改。 GitHub 上有一个未解决的问题:https://github.com/flutter/flutter/issues/35783

,

正确的解决方案是使用 Traceback (most recent call last): File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py",line 343,in _run_event await coro(*args,**kwargs) File "main.py",line 98,in on_message users = json.load(f) File "/usr/lib/python3.8/json/__init__.py",line 293,in load return loads(fp.read(),File "/usr/lib/python3.8/json/__init__.py",line 357,in loads return _default_decoder.decode(s) File "/usr/lib/python3.8/json/decoder.py",line 337,in decode obj,end = self.raw_decode(s,idx=_w(s,0).end()) File "/usr/lib/python3.8/json/decoder.py",line 355,in raw_decode raise JSONDecodeError("Expecting value",s,err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 。关于它在 android 11 上不起作用的部分。我认为情况并非如此。只需将 android:requestLegacyExternalStorage="true" 添加到您的 android:requestLegacyExternalStorage="true" 文件中,并在 AndroidManifest 中更改 build.gradle,同时保留 targetSdkVersion 29。这应该可以正常工作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...