Android 从目录';文件描述符

Android 从目录';文件描述符,android,file-descriptor,android-file,android-contentresolver,android-fileprovider,Android,File Descriptor,Android File,Android Contentresolver,Android Fileprovider,我有来自其他应用程序共享意图的目录的内容uri。由此我可以创建FileDescriptor并打开InputStream。但是我如何检查它是否是目录,如果它是目录,如何获取文件呢? 谢谢 我有来自其他应用程序共享意图的目录的内容uri 没有“目录的内容uri”这类东西,就像没有“目录的RESTURL”一样 在某些情况下,我们可能有一个协议,Uri表示内容的集合(例如,Contacts合同.Contacts.content\u Uri,一个通过ACTION\u OPEN\u文档树检索的Uri)。在标

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

我有来自其他应用程序共享意图的目录的内容uri

没有“目录的内容uri”这类东西,就像没有“目录的RESTURL”一样

在某些情况下,我们可能有一个协议,
Uri
表示内容的集合(例如,
Contacts合同.Contacts.content\u Uri
,一个通过
ACTION\u OPEN\u文档树
检索的
Uri
)。在标准Android中,通过
ACTION\u SEND
交付的“目录内容uri”没有这样的协议

由此,我可以创建FileDescriptor并打开InputStream

可能吧。这完全取决于
Uri
实际代表的内容

但是我如何检查它是否是目录,如果它是目录,如何获取文件呢

一般来说,你不能

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

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

对于特定的应用程序,您可以联系该应用程序的开发人员,并询问他们“嘿,当您给我一个类似于此的
Uri
时,我如何使用它?”

TL;DR:如果通过
ACTION\u SEND
给你一个
Uri
,其中
Uri
指向任何不是内容的东西,则发送应用程序有一个bug