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