MediaStore возвращает null при запросе DISPLAY_NAME

#android #mediastore

#Android #mediastore

Вопрос:

В некоторых редких ситуациях MediaStore возвращается null при попытке запроса на MediaStore.Video.VideoColumns.DISPLAY_NAME использование следующего фрагмента кода

 String displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Video.VideoColumns.DISPLAY_NAME));
  

Я предполагаю, что это может быть связано с именем файла, поскольку оно сообщается только на нескольких устройствах. Однако я предполагаю, что отображаемые имена файлов не могут быть нулевыми, поэтому это немного странно, что MediaStore возвращается null . Кто-нибудь сталкивался с подобной проблемой?

Комментарии:

1. Для Android 9 и ниже оно обнуляется. Но на Android 10 оно становится ненулевым.

2. @AnggrayudiH Как оно может стать нулевым? Я смотрел MediaProvider , и кажется, что DATA столбец используется для DISPLAY_NAME косвенного поиска, когда прямой запрос возвращает null. Как DATA поле может стать нулевым для файла, присутствующего в хранилище?

3. Поле ДАННЫХ устарело в Android 10 и может содержать или не содержать никаких данных вообще. Наиболее логичным является то, что если DISPLAY_NAME пустое, то поле TITLE должно быть наиболее логичным альтернативным полем, хотя это поле не содержит расширения media.

Ответ №1:

У нас такая же проблема на одном устройстве.

Если значение DISPLAY_NAME равно null, то можно использовать ЗАГОЛОВОК.

 String displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Video.VideoColumns.DISPLAY_NAME));
if (displayName == null) {
    displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Video.VideoColumns.TITLE));
}