【发布时间】:2021-11-15 10:50:10
【问题描述】:
除了请求 MANAGE_EXTERNAL_STORAGE 权限外,Android 11 上是否有任何方法可以获取某些非媒体文件的可读 File.class?
使用Storage Access Framework 和DocumentFile 我可以获得Uri(canRead 和canWrite 都返回true),但是当我将它转换为File 时,canRead 和canWrite 都返回false(存在返回true)。
我的应用程序正在使用的文件是用户在他们的计算机上创建的大型 SQLite 数据库,我只读取它们(如果有什么不同的话),但为了做到这一点,我需要 File,而不是 Uri。
目前,我的选择是:
- 让我的用户想办法将文件直接复制到数据/数据目录(计算机和大多数文件管理器都看不到)
- 将文件(使用输入/输出流)复制到数据/数据目录(这意味着 500MB 文件将占用设备上 1GB 的内部存储空间)
- 申请 MANAGE_EXTERNAL_STORAGE 权限,我怀疑 Google 会批准
我错过了什么吗?
【问题讨论】:
-
您的问题可能源于
when I convert it to File。以下可能也不正确but in order to do that, I need File, instead of Uri。您提到canRead返回true,您还提到which I only read。如果canRead返回 true 而您只想阅读它,那么是什么阻碍了您... -
我认为你不明白这个问题。我不想保存 Uri,我想从 SQLite 数据库中读取数据。正如我所说,我的问题不在于 SAF,我提示用户许可以及 takePersistableUriPermission(),将其保存到 SharedPreferences,从中读取,并且 Uri 对 canRead 和 canWrite 都返回 true。
标签: android-sqlite android-permissions android-file android-11 android-storage