Код: Выделить всё
fun search(query: String): MutableList {
val outputTracks = mutableListOf()
val projection = arrayOf(
MediaStore.Audio.Media._ID, // ID of the audio file
MediaStore.Audio.Media.DISPLAY_NAME, // Name of the audio file
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.DURATION,
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
MediaStore.Audio.Media.RELATIVE_PATH
} else {
MediaStore.Audio.Media.DATA
}
)
val selection = "(${MediaStore.Audio.Media.DISPLAY_NAME} LIKE ? OR ${MediaStore.Audio.Media.TITLE} LIKE ?)"
val selectionArgs = arrayOf("%${query}", "%${query}")
try {
context.contentResolver.query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
projection,
selection,
selectionArgs,
null
)?.use { cursor ->
Log.i("FILETEST", "yaya2")
if (cursor.count == 0) {
Log.i("FILETEST", "empty")
} else {
Log.i("FILETEST", "not empty")
}
while (cursor.moveToNext()) {
Log.i(
"FILETEST",
cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME))
)
outputTracks.add(cursorToTrackClass(cursor))
}
}
} catch (e: IllegalArgumentException) {
Log.e("FILETEST", "Query failed: ", e)
}
return outputTracks
Код: Выделить всё
На виртуальном диске я использовал Проводник устройств, чтобы добавить .mp3 в папку «Загрузки» в качестве папки «Музыка».
Я создаю «SearchManager» в своем onCreate(), используя: sm = SearchManager(applicationContext).
Использование API 35 для моего AVD. Проблема не в запросе; это также не работает при передаче значения null для обоих вариантов выбора в качестве selectArgs. Я синхронизировал файлы после их загрузки. Как вы можете догадаться, Logcat никогда не печатал «не пусто».
Изменить: использование INTERNAL_CONTENT_URI вместо этого дает мне результаты Deneb.ogg, Girtab.ogg и OrganDub.ogg (примеры звуков помещены в мой проект с помощью Android Studio, я полагаю). Но по-прежнему нет результата с использованием EXTERNAL_CONTENT_URI
Подробнее здесь: https://stackoverflow.com/questions/790 ... -any-files