【发布时间】:2021-12-28 00:53:56
【问题描述】:
我正在使用SqliteImportExporter 库将我的数据库文件导入和导出到公共文件夹“文档”。我不认为该文件具有 MIME 类型,它只是从字节流创建并具有 .db 文件扩展名。
在以 Android API 30 为目标之后,如果我卸载并重新安装我的应用程序,它就无法访问它之前创建的文件,也无法导入或覆盖它。
Android documentation 谈到使用ACTION_OPEN_DOCUMENT_TREE 意图来授予对整个目录及其内容的访问权限。选择要授予权限的目录后,它仍然没有访问权限。这个过程返回的 URI 有什么神奇之处,还是在获得许可后我仍然可以使用该库?我正在为库提供文件的绝对路径 - 在我以 API 30 为目标并在 API 30 AVD 上运行应用程序之前,该路径一直有效。
有人可以为我指出正确的方向吗?
编辑:我的问题现在简单归结为,当以 API 30 为目标时,如何简单地将文件复制到共享文件夹(例如文档文件夹),并且仍然保持对 API 21 及更高版本的支持。
【问题讨论】:
-
After selecting the directory to give permission, it still have no access选择目录并获得权限后,您拥有完全访问权限。然后您可以读取所有文件。但是使用绝对路径还没有完成。使用 uri。更新库。 -
谢谢。不能使用绝对路径令人失望。授予的访问权限是永久的,还是每次运行都需要请求?
-
您可以通过获取持久化 uri 权限使其永久化。
-
我想我现在还需要了解如何实现 DocumentsProvider 和 ContentResolver。只是为了在目标 API 30 之后读/写一个简单的文件。:-/
-
没有。这些都不是必需的。
标签: java android android-11 scoped-storage action-open-document-tree