Ошибка при преобразовании между Mediastore Uri и DocumentFile Uri: «Не удалось определить, является ли дочерний элемент» - PullRequest
0 голосов
/ 13 апреля 2020

Вот сценарий:

Я пишу приложение, которое просит пользователя открыть каталог, и приложение загружает все изображения в каталоге (а затем выполняет основные операции c, такие как перемещение или удаление ). Поскольку listFiles медленный, я получаю изображения, используя MediaStore API (запрашивая столбец _data, полученный из полученного DocumentFile Uri) и преобразовывая их при необходимости в DocumentFile следующим образом:

// Given MediaStore Uri:
val docUri = MediaStore.getDocumentUri(context, mediaUri)
return DocumentFile.fromSingleUri(context, docUri)

Проблема в том, иногда Я получаю:

java.lang.IllegalArgumentException: Failed to determine if primary:DirectoryA/image.jpg is child of primary:DirectoryB/image.jpg: java.io.FileNotFoundException: Missing file for primary:DirectoryB/image at /storage/emulated/0/DirectoryB

... когда я пытаюсь получить DocumentFile для некоторого image.jpg в каталоге DirectoryA ( первая строка). По какой-то причине Android пытается проверить, должен ли image.jpg находиться в другом каталоге? (Возможно, изображения были там в какой-то момент?).

Кстати, когда я двигаю изображения, я использую DocumentsContract.moveDocument.

* Приложение - Android 10 +.

Обновление: как я запрашиваю MediaStore:

context.contentResolver.query(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    arrayOf(MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA),
    MediaStore.Images.ImageColumns.DATA + " like ? and " + MediaStore.Images.ImageColumns.DATA + " not like ?",
    arrayOf("$path/%", "$path/%/%"),
    null
)

Это работает на Android Q, с targetSdkVersion 29.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...