Как правильно получить список всех локальных аудиофайлов и его параметров?

#java #android #kotlin #android-mediaplayer

#java #Android #kotlin #android-mediaplayer

Вопрос:

На данный момент я делаю это с помощью content resolver. Код:

 private fun loadMedia(): List<LocalMusic> {
    val list = mutableListOf<LocalMusic>()

    val contentResolver = context.contentResolver

    val uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
    val selection = "${MediaStore.Audio.Media.IS_MUSIC}!= 0"
    val sortOrder = "${MediaStore.Audio.Media.TITLE} ASC"
    var i = 0
    contentResolver.query(uri, null, selection, null, sortOrder).use {
        if (it != null amp;amp; it.count > 0) {
            while (it.moveToNext()) {
                val title = it.getString(it.getColumnIndex(MediaStore.MediaColumns.TITLE))
                // Android Studio shows a lint, which tells that MediaStore.MediaColumns.ARTIST 
                //requires API 30. But in Android Pie it works.
                val artist = it.getString(it.getColumnIndex(MediaStore.MediaColumns.ARTIST))
                //the same lint as described above(required api 29)
                val album = it.getString(it.getColumnIndex(MediaStore.MediaColumns.ALBUM))
                // This one is deprecated(fantastic, what to do?).
                val source = it.getString(it.getColumnIndex(MediaStore.MediaColumns.DATA))
                val duration = it.getLong(it.getColumnIndex(MediaStore.MediaColumns.DURATION))
                list.add(LocalMusic(id = "$i", artist = artist, title = title, source = source,
                        album = album, duration = duration, image = "some uri"))
                i  
            }
        }
    }
    return list.toList()
}
 

Итак, есть несколько вопросов:

  1. Основной. Должен ли я использовать MediaStore.MediaColumns.ДАННЫЕ для получения URI в любом случае? Я знаю, что Google сообщает: «Иногда у вас нет разрешений на работу с хранилищем, бла-бла, вот почему оно устарело», но есть ли лучший способ (у меня всегда есть необходимые разрешения)?
  2. О «MediaStore.MediaColumns.ИСПОЛНИТЕЛЬ» и «Медиастор.MediaColumns.АЛЬБОМ». Почему для этого требуется API 30, если я нашел его использование в учебниках 5-6 лет назад, хотя API 30 вообще не было? Из-за библиотек поддержки, миграций и т. Д.? Должен ли я продолжать его использовать?