Read/write 下载文件夹在针对 Android SDK 版本 29 后被拒绝

Read/write to Downloads folder denied after targeting Android SDK version 29

我的 Flutter 应用程序需要读取和写入下载文件夹(/storage/emulated/0/Download,更准确地说)。

在以 SDK 版本 29(build.gradle 中的targetSdkVersion 29)为目标之前,这很顺利,仅通过请求

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:remove="android:maxSdkVersion" />

AndroidManifest.xml.

令我惊讶的是,在将新版本部署到我的 phone 后,该应用程序在尝试访问该文件夹时开始引发访问被拒绝错误,尽管已授予上述两个权限的访问权限。我想这是因为我将 targetSDKVersion 更改为 29.

解决方案是将 android:requestLegacyExternalStorage="true" 添加到 AndroidManifest.xml 中的 <app> 节点。

不过,好像Android11会忽略这个标志,所以只是临时修复。

所以,我的问题是:在即将推出的 Android 版本中,确保访问 Flutter 应用程序的下载文件夹的正确、官方、可靠的方法是什么?

使用下载文件夹是一项严格要求。

谢谢!

However, it seems that Android 11 will ignore this flag,

确实如此。它在 Android 11 设备上没有用。它仅适用于 Android 10 台设备。

so it is only a temporary fix.

否,因为对于 Android 10 设备它将继续工作。

对于 Android 11 设备,您不需要它,因为您可以像 10 之前一样阅读 public 文件夹,例如再次下载。