0

我有其他應用程序的共享意圖目錄的內容URI。從這我可以創建FileDescriptor並打開InputStream。但是,如何查看它是否是目錄並獲取文件(如果是目錄)呢? 謝謝!從目錄的FileDescriptor獲取文件

回答

0

我已經從其他應用的分享意圖

有作爲「目錄的內容URI」沒有這樣的事目錄的內容URI,任何超過有一個「目錄的REST URL」。

在某些情況下,我們可具有協議,其中一個Uri表示的內容的集合(例如,ContactsContract.Contacts.CONTENT_URI,一個Uri經由ACTION_OPEN_DOCUMENT_TREE檢索)。目前沒有這樣的協議,通過ACTION_SEND在標準的Android中發佈。

從這個我可以創造的FileDescriptor和開放的InputStream

可能。這完全取決於Uri究竟代表什麼。

但是,如何檢查它是否是目錄並獲取文件,如果它是目錄?

一般情況下,你不能。

如果Uri恰好由文件提供者進行備份,並Uri恰好代表的內容的樹,DocumentFile.fromTreeUri()會讓你列出該樹中的文件,類似於上File的API。

否則,歡迎您來看看MIME類型Uri的。如果MIME類型以vnd.android.cursor.dir/開頭,那麼它應該是Uri,您可以query(),儘管沒有關於哪些列的規則。如果MIME類型是其他任何內容,則對於內容是什麼以及如何使用它沒有規定。

對於特定的應用程序,您可以聯繫應用程序的開發人員,並詢問他們:「嘿,當您給我看起來像這樣的Uri,我該如何使用它?」。

TL; DR:如果你是通過ACTION_SEND,如該Uri點什麼,是不是一塊內容,發送應用程序有一個bug給予Uri