Как безопасно проверить, является ли URI деревом документовAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как безопасно проверить, является ли URI деревом документов

Сообщение Anonymous »

Я хочу вызвать ContentResolver.query по URI. Поскольку я не могу передать URI, возвращаемый намерением ACTION_OPEN_DOCUMENT_TREE, в ContentResolver.query, поскольку это дерево документа, а не документ, я сначала делаю следующее:

Код: Выделить всё

if(DocumentsContract.isTreeUri(uri))
uri = DocumentsContract.buildDocumentUriUsingTree(uri, DocumentsContract.getTreeDocumentId(uri));
Когда это сделано, я могу передать преобразованный uri в ContentResolver.query, и он работает нормально.
Но есть одна проблема: очевидно, isTreeUri просто проверяет, встречается ли что-то вроде /tree/ в URI, а затем возвращает true, что приводит к множеству ложных срабатываний, например предположим, я хочу проверить подкаталог foo в дереве документов, указанном uri, с помощью ContentResolver.query, поэтому сначала я делаю что-то вроде этого, чтобы добавить подкаталог foo к дереву документов uri, который был возвращен ACTION_OPEN_DOCUMENT_TREE:

Код: Выделить всё

DocumentFile targetUri = DocumentFile.fromTreeUri(this, uri);
DocumentFile subDir = targetUri.findFile("foo");
Uri subDirUri = subDir.getUri();
Теперь буквальное представление subDirUri будет примерно таким:

Код: Выделить всё

content://com.android.externalstorage.documents/tree/primary%3AMyDir/document/primary%3AMyDir%2Ffoo
Поскольку в этом URI есть подстрока /tree/, DocumentsContract.isTreeUri возвращает true для этого URI, но, конечно, на самом деле это не дерево, потому что я могу легко передать его в ContentResolver.query, и в этом случае я должен НЕ передавать его в buildDocumentUriUsingTree, потому что это не удастся, поэтому я ищете способ безопасно определить, является ли URI деревом документа или нет. Судя по всему, isTreeUri не совсем подходит для этой работы...

Подробнее здесь: https://stackoverflow.com/questions/798 ... ument-tree
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»