从目录的FileDescriptor中获取文件

时间:2017-02-07 19:38:46

标签: android file-descriptor android-file android-contentresolver android-fileprovider

我从其他应用的共享意图中获得了目录uri。从这里我可以创建FileDescriptor并打开InputStream。但是如何查看它的目录并获取文件(如果它的目录)? 谢谢!

1 个答案:

答案 0 :(得分:0)

  

我从其他应用的分享意图中获得了目录uri的目录

目录"中没有"内容uri,而不是目录"的" REST URL。

在某些情况下,我们可能会有一个协议,其中Uri表示内容集合(例如,ContactsContract.Contacts.CONTENT_URIUri通过ACTION_OPEN_DOCUMENT_TREE检索。在标准Android中,目录"内容uri没有这样的协议,通过ACTION_SEND传送。

  

从这里我可以创建FileDescriptor并打开InputStream

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

  

但是如何查看目录和获取文件的目录?

一般来说,你不能。

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

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

对于特定的应用,您可以联系该应用的开发者并问他们嘿,当您给我一个Uri看起来像这样的时候,我该如何使用它?"。

TL; DR:如果您通过Uri获得ACTION_SENDUri指向任何非内容的内容,则发送应用都有错误。< / p>