使用ACTION_OPEN_DOCUMENT_TREE时,Storage Access Framework不显示云根

时间:2019-06-11 08:52:41

标签: android local-storage cloud-storage storage-access-framework

我读到我必须为Android Q版本预先准备好我的应用程序,因为如果不撤消对应用程序拥有的目录之外文件的通用读取/写入访问权限,那么它们将被弃用。

幸运的是,我没有多少行代码可以更改。

事实是,存储访问框架似乎存在一些问题。我在基特卡特(Kitkat)那里(我不知道)。否则我的代码是错误的。

我不能简单地使用户在云存储上选择一个文件夹,以获取Uri作为回报,以进一步填充该文件夹。

当我使用

处的示例代码时

https://github.com/android/storage/tree/228c8e0aa19586bfcf36318ddb191719537a45a4/ActionOpenDocumentTree#action_open_document_tree

并将其放入基本活动应用程序(由IDE创建的示例默认应用程序)中,可能会发生用户无法选择云存储根目录而只能选择磁盘位置的情况。它在Kotlin中,但我将其翻译成Java而没有更改。这不是Java问题,因为我也尝试过Kotlin版本。

[我用其他技巧编写了其他代码,这些技巧至少导致将云文件夹Uri放回onActivityResult方法中。它包含使用不同的Intent Action,但仍然不能满足我的目的,中间件不喜欢它,因此会破坏Storage Access Framework - failing to obtain document tree from uri (returned from Drive app)]

在两种情况下,我都有相同的路径:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="filesPath" path="/"/>
<external-path name="externalPath" path="/"/>
<external-files-path name="externalFilesPath" path="/"/>
</paths>

如何让用户在云提供商上选择文件夹以及如何获取uri?

1 个答案:

答案 0 :(得分:1)

DocumentsProvider可以分别使用标志FLAG_SUPPORTS_IS_CHILDFLAG_SUPPORTS_CREATE选择是否支持ACTION_OPEN_DOCUMENT_TREEACTION_CREATE_DOCUMENT

Google云端硬盘目前不支持ACTION_OPEN_DOCUMENT_TREE,因此这就是无法选择它的原因。

我相信Nextcloud支持ACTION_OPEN_DOCUMENT_TREE,因此可能会有所帮助。

  

我用一些技巧编写了其他代码,这些技巧至少导致将云文件夹Uri放回onActivityResult方法中。它包含使用不同的Intent Action,但仍然不能满足我的目的,中间件不喜欢它,因此它破坏了Storage Access Framework-无法从uri获取文档树(从Drive应用返回)

是的。然后将返回的URI传递给提供程序(在本例中为Google Drive),由提供程序最终决定要返回的文档。由于云端硬盘不支持这种子关系,因此无法正常工作。

Ian Lake的博客文章Building a DocumentsProvider中对此有更多详细说明。