针对 Android SDK 版本 29 后,对“下载”文件夹的读/写被拒绝

Sor*_*scu 6 android android-permissions flutter

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

在针对 SDK 版本 29(targetSdkVersion 29在 build.gradle 中)之前,这一切进展顺利,只需请求

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:remove="android:maxSdkVersion" />
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

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

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

不过,Android 11 似乎会忽略这个标志,所以这只是一个临时修复。

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

下载文件夹的使用有严格要求。

谢谢你!

bla*_*pps 3

不过,Android 11似乎会忽略这个标志,

的确。它在 Android 11 设备上没有用。它仅适用于 Android 10 设备。

所以这只是一个临时修复。

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

对于 Android 11 设备,您不需要它,因为您只需像 10 之前一样读取公共文件夹,例如再次下载。