从目录的 FileDescriptor 获取文件

Get files from directory's FileDescriptor

我有来自其他应用程序共享意图的目录内容 uri。由此我可以创建 FileDescriptor 并打开 InputStream。但是我如何检查它是否是目录并获取文件如果它是目录? 谢谢!

I have content uri of directory from other app's share intent

没有"content uri of directory",就像没有"REST URL of directory"一样。

在某些情况下,我们可能有一个协议,其中 Uri 表示内容集合(例如,ContactsContract.Contacts.CONTENT_URI,通过 ACTION_OPEN_DOCUMENT_TREE 检索的 Uri)。 "content uri of directory" 没有这样的协议,通过 ACTION_SEND 在标准 Android 中交付。

From this I can create FileDescriptor and open InputStream

可能吧。这完全取决于 Uri 实际代表什么。

But how can I check if it's directory and get files if it's directory?

一般情况下,你不能。

如果此 Uri 恰好由文档提供者支持,并且 Uri 恰好表示内容树,DocumentFile.fromTreeUri() 将允许您列出该树中的文档,类似于 File 上的 API。

否则,欢迎您查看 Uri 的 MIME 类型。如果 MIME 类型以 vnd.android.cursor.dir/ 开头,那么它应该是一个 Uri,你可以 query(),尽管对于有哪些列没有规则。如果 MIME 类型是任何其他类型,则没有关于内容是什么以及如何使用它的规则。

对于特定的应用,您可以联系应用的开发者并询问他们"hey, when you give me a Uri that looks like this, how can I use it?"。

TL;DR:如果通过 ACTION_SEND 给你一个 Uri,其中 Uri 指向任何不是内容的东西,发送应用程序有一个错误.