Запрос MediaStore для Android MediaStore.MediaColumns.TITLE столбец для некоторых файлов имеет значение null

Я делаю запрос к базе данных файлов Android MediaStore - MediaStore.Files.getContentUri("external") - и для некоторых конкретных папок как MediaStore.MediaColumns.TITLE, так и MediaStore.MediaColumns.DISPLAY_NAME равны нулю, а для других папки это значение существует. Я не смог найти никакой документации о том, что MediaStore.MediaColumns.TITLE может быть нулевым.

Это происходит для нескольких внутренних каталогов Android, таких как эти:

_data: /storage/emulated/0/Music, title: null, _display_name: null
_data: /storage/emulated/0/Notifications, title: null, _display_name: null
_data: /storage/emulated/0/Pictures, title: null, _display_name: null

Однако для некоторых других папок есть заголовок:

 _data: /storage/emulated/0/Android, title: Android, _display_name: null
 _data: /storage/emulated/0/DCIM, title: DCIM, _display_name: null
 _data: /storage/emulated/0/Download, title: Download, _display_name: null

Все данные поступают напрямую из запроса MediaStore.

Я знаю, что могу работать непосредственно с данными, но я пытаюсь отсортировать запрос в соответствии с НАЗВАНИЕМ, что приводит к неверным результатам, учитывая, что некоторые из них равны нулю.

Это ожидаемое поведение? Как с этим бороться и получить все файлы, правильно отсортированные по названию?

Ответ 1

Похоже, это ограничение для Android. Вы всегда можете попробовать сделать такой порядок:

select substr(
    substr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), instr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), '/') + 1),
    instr(substr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), instr(substr(MediaStore.MediaColumns.DATA, instr(MediaStore.MediaColumns.DATA, '/') + 1), '/') + 1), '/') + 1
    ) from tablename;

Обратите внимание, что это не рекурсивно, но работает только до 3 '/'.

Это можно сделать рекурсивно, но оно было введено позднее на Android