Android 从所需文件夹播放音频文件

Android 从所需文件夹播放音频文件,android,audio,directory,media-player,kotlin,Android,Audio,Directory,Media Player,Kotlin,我有5个文件夹,每个文件夹包含5个音频文件。当有人点击某个文件夹时,程序应该开始播放该文件夹中的所有音频文件。 我刚接触安卓系统,所以我对它知之甚少。 我试过这样做,但它显示了所有的音频文件在一起。 我希望它显示文件夹的智慧 fun abs(){ var songsURI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI var selection = MediaStore.Audio.Media.IS_MUSIC + "!=0"

我有5个文件夹,每个文件夹包含5个音频文件。当有人点击某个文件夹时,程序应该开始播放该文件夹中的所有音频文件。 我刚接触安卓系统,所以我对它知之甚少。 我试过这样做,但它显示了所有的音频文件在一起。 我希望它显示文件夹的智慧

fun abs(){

    var songsURI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
    var selection = MediaStore.Audio.Media.IS_MUSIC + "!=0"
    val cursor = contentResolver.query(songsURI,null,selection,null,null)
    if(cursor!= null)
    {
        if (cursor!!.moveToFirst()){

            do
            {
                var songURL = cursor!!.getString(cursor!!.getColumnIndex(MediaStore.Audio.Media.DATA))
                        var songAuth =cursor!!.getString(cursor!!.getColumnIndex(MediaStore.Audio.Media.ARTIST))
                                var SongNAme = cursor!!.getString(cursor!!.getColumnIndex(MediaStore.Audio.Media.TITLE))
                listSongs.add(Songinfo(songURL,songAuth,SongNAme))

            }while (cursor!!.moveToNext())
        }
        cursor!!.close()

        adapter = MySongAdapter(listSongs)
        hello.adapter = adapter
    }


}

请帮助

下面的代码将为您提供每个目录中的歌曲列表,您应该更改适配器以显示目录名和歌曲列表

data class SongInfo(var songURL: String, var songAuth: String, var songNAme: String)
data class DirInfo(var dir: String, var songInfo: ArrayList<SongInfo>)

private fun getAudioDirectories(): ArrayList<DirInfo> {

    var result = ArrayList<DirInfo>()

    val directories = LinkedHashMap<String, ArrayList<SongInfo>>()

    val uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
    val selection = MediaStore.Audio.Media.IS_MUSIC + "!=0"

    val order = MediaStore.Audio.Media.DATE_MODIFIED + " DESC"

    val cursor = getContentResolver().query(uri, null, selection, null, order)

    cursor.let {
        it.moveToFirst()

        val pathIndex = it.getColumnIndex(MediaStore.Images.Media.DATA)

        do {
            val path = it.getString(pathIndex)

            val file = File(path)
            if (!file.exists()) {
                continue
            }

            val fileDir = file.getParent()

            var songURL = it.getString(it.getColumnIndex(MediaStore.Audio.Media.DATA))
            var songAuth = it.getString(it.getColumnIndex(MediaStore.Audio.Media.ARTIST))
            var songName = it.getString(it.getColumnIndex(MediaStore.Audio.Media.TITLE))

            if (directories.containsKey(fileDir)) {
                var songs = directories.getValue(fileDir);

                var song = SongInfo(songURL, songAuth, songName)

                songs.add(song)

                directories.put(fileDir, songs)
            } else {
                var song = SongInfo(songURL, songAuth, songName)

                var songs = ArrayList<SongInfo>()
                songs.add(song)

                directories.put(fileDir, songs)
            }
        } while (it.moveToNext())


        for (dir in directories) {
            var dirInfo: DirInfo = DirInfo(dir.key, dir.value);

            result.add(dirInfo)
        }
    }

    return result
}
数据类SongInfo(var-songURL:String,var-songAuth:String,var-songNAme:String)
数据类DirInfo(var dir:String,var songInfo:ArrayList)
private fun GetAudioDirectory():ArrayList{
var result=ArrayList()
val directories=LinkedHashMap()
val uri=MediaStore.Audio.Media.EXTERNAL\u CONTENT\u uri
val selection=MediaStore.Audio.Media.IS_MUSIC+“!=0”
val order=MediaStore.Audio.Media.DATE_MODIFIED+“DESC”
val cursor=getContentResolver().query(uri、null、selection、null、order)
游标。let{
it.moveToFirst()
val path index=it.getColumnIndex(MediaStore.Images.Media.DATA)
做{
val path=it.getString(路径索引)
val文件=文件(路径)
如果(!file.exists()){
持续
}
val fileDir=file.getParent()
var songURL=it.getString(it.getColumnIndex(MediaStore.Audio.Media.DATA))
var songAuth=it.getString(it.getColumnIndex(MediaStore.Audio.Media.ARTIST))
var songName=it.getString(it.getColumnIndex(MediaStore.Audio.Media.TITLE))
if(directories.containsKey(fileDir)){
var songs=directories.getValue(fileDir);
var song=SongInfo(songURL、songAuth、songName)
歌曲。添加(歌曲)
目录.put(文件目录,歌曲)
}否则{
var song=SongInfo(songURL、songAuth、songName)
var songs=ArrayList()
歌曲。添加(歌曲)
目录.put(文件目录,歌曲)
}
}while(it.moveToNext())
for(目录中的目录){
var dirInfo:dirInfo=dirInfo(dir.key,dir.value);
结果.添加(dirInfo)
}
}
返回结果
}

使用您的适配器我们无法显示包含歌曲列表的专辑列表,您可以使用,也可以从

中获取这些LIB中的任何一个Hi感谢您的回答,我面临适配器问题更新我的答案,如果您的问题已解决,请获取包含相关歌曲列表的专辑列表,接受我的回答。我编写了适配器类,但我的屏幕上没有显示任何内容。您可以在问题中添加适配器类,以便我可以对此进行研究。