У меня есть содержание uri из каталога с намерением поделиться другим приложением. Из этого я могу создать FileDescriptor и открыть InputStream. Но как я могу проверить, если это каталог и получить файлы, если это каталог? Спасибо!Получить файлы из файла FileDescriptor в каталоге
ответ
У меня есть содержание УИРА каталога от доли намерения другого приложения
Там нет такого понятия, как «содержание УИР директории», не больше, чем есть «REST URL директории».
В некоторых случаях мы можем иметь протокол, где Uri
представляет коллекцию контента (например, ContactsContract.Contacts.CONTENT_URI
, A Uri
извлеченную с помощью ACTION_OPEN_DOCUMENT_TREE
). Нет такого протокола для «content uri of directory», который поставляется через ACTION_SEND
, в стандартном Android.
Из этого я могу создать FileDescriptor и открытый InputStream
Возможно. Это полностью зависит от того, что фактически представляет собой Uri
.
Но как я могу проверить, если это каталог и получить файлы, если это каталог?
В общем, вы не можете.
Если Uri
случается при поддержке со стороны поставщика документа, а Uri
происходит представлять дерево содержания, DocumentFile.fromTreeUri()
позволит вам список документов, в том дереве, похожее на API на File
.
В противном случае, вы можете посмотреть тип MIME Uri
. Если тип MIME начинается с vnd.android.cursor.dir/
, тогда он должен быть Uri
, что вы можете query()
, хотя для каких столбцов нет правил. Если тип MIME - это что-то еще, нет правил для содержимого и того, как вы можете его использовать.
Для конкретных приложений вы можете связаться с разработчиками приложения и спросить их «эй, когда вы дадите мне Uri
, который выглядит так, как я могу его использовать?».
TL; DR: если вы получаете Uri
через ACTION_SEND
, где что Uri
указывает на что-либо, что не является частью контента, отправка приложение имеет ошибку.