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 文件夹,例如再次下载。
我的 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 文件夹,例如再次下载。