gpt4 book ai didi

android - 从存储访问框架中的文档 ID 获取文件 URI

转载 作者:行者123 更新时间:2023-11-30 01:00:44 26 4
gpt4 key购买 nike

我正在使用此 Google Sample 中描述的目录选择.它确实提供了所选目录的子目录的文件名和 MIME 类型。如果我在游标查询上使用 COLUMN_DOCUMENT_ID,我也可以获得文件的文档 ID。相反,我对 child 的文件 URI 感兴趣。当我使用 ACTION_OPEN_DOCUMENT 而不是 ACTION_OPEN_DOCUMENT_TREE 时,我很容易得到子 uri,这是通过添加 %2Fchildfile.extention(%2F 是只是一个正斜杠)。所以我尝试使用以下代码获取子文件 uri -

uri = Uri.parse(docUri.toString()+"%2F"+fileName);

我得到了文件名,但是当我对其运行 exists() 方法时(通过将其转换为 DocumentFile),它返回 false。这意味着,要么我没有文件的许可,要么这不是获取子 uri 的正确方法。

我是不是遗漏了什么,还是有其他方法可以选择一个文件夹并轻松获取所有子文件夹的文件 uri。

PS:我目前正在 Marshamallow 中检查它。

最佳答案

阅读文档并尝试某些示例后,我得到了以下方法从选定的 docUri/treeUri 获取单个文件 Uri

uri = DocumentsContract.buildDocumentUriUsingTree(docUri,docId);

然后您可以随时使用以下代码将其转换为 DocumentFile -

DocumentFile file = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (DocumentsContract.isDocumentUri(context, uri)) {
file = DocumentFile.fromSingleUri(context, uri);
} else {
file = DocumentFile.fromTreeUri(context, uri);
}
}

fromTreeUri() 方法对于选定的树目录是必需的,以便它可以在 file.exists() 方法调用时返回 true。
您需要记住,如果子目录包含任何目录,则您不能对其调用 childDirectory.listFiles()。它会给出 UnsupportedOperationException,因为您没有访问子目录文件的权限。阅读更多相关信息 here .

关于android - 从存储访问框架中的文档 ID 获取文件 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39464909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com