我想使用内容解析器获取与媒体ID列表匹配的歌曲列表。
例如,G
SELECT FROM AUDIO WHERE _id = {223, 22, 38, 90}.
因此,这将返回具有相应ID的介质列表,因此我将获得介质223、介质22、介质38和介质90
我正在执行类似的操作,但它返回的是一个空列表。
private var selectionArgs = ArrayList<Long>()
private val projection = arrayOf(
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DISPLAY_NAME,
)
private fun getColumnIndex(cursor: Cursor, columnName: String): Int{
return cursor.getColumnIndex(columnName)
}
fun getSongsInPlaylist(songIds: List<Long>): List<Songs> {
val selection = "${MediaStore.Audio.Media._ID} = ?"
selectionArgs = songIds as ArrayList<Long>
val songList = mutableListOf<Songs>()
val collection = Utility.sdk29AndUp {
MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
} ?: MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
//Get songs from provider
context.contentResolver.query(
collection,
projection,
selection,
arrayOf(selectionArgs.toTypedArray().toString()),
MediaStore.Audio.Media.DEFAULT_SORT_ORDER //Sort in alphabetical order based on
display name.
).use { cursor ->
if (cursor?.moveToFirst() == true) {
do {
..........
}
songList.add(
Songs(
mediaId = id,
title = truncatedTitle,
subtitle = truncatedArtisteName,
)
)
} while (cursor.moveToNext())
}
}
return songList
此代码返回{}的空列表,同时将mediaId列表传递给查询...
但是当我尝试使用单一媒体时..像这样:
val selection = "${MediaStore.Audio.Media._ID} = 38"
它的工作...
我需要一个媒体列表...与媒体相匹配
1条答案
按热度按时间oalqel3c1#
若要取得符合ID的媒介清单,您必须提供(?)字段的数目,以了解SQL数据库。
我知道这不是最好的做法,但这是完成任务。
在Kotlin