从目录的 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
指向任何不是内容的东西,发送应用程序有一个错误.
我有来自其他应用程序共享意图的目录内容 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
指向任何不是内容的东西,发送应用程序有一个错误.