播放所需文件夹中的音频文件
Playing audio files from desired folder
我有5个文件夹,每个文件夹包含5个音频文件。当有人点击文件夹时,程序应该开始播放该文件夹中的所有音频文件。
我是 android 的新手,所以我对此知之甚少。
我尝试这样做,但它会同时显示所有音频文件。
我希望它能明智地显示文件夹。
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
}
使用您的适配器我们无法显示带有歌曲列表的专辑列表,您可以使用 this or you can take any of these libs from Android-Arsenal
我有5个文件夹,每个文件夹包含5个音频文件。当有人点击文件夹时,程序应该开始播放该文件夹中的所有音频文件。 我是 android 的新手,所以我对此知之甚少。 我尝试这样做,但它会同时显示所有音频文件。 我希望它能明智地显示文件夹。
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
}
使用您的适配器我们无法显示带有歌曲列表的专辑列表,您可以使用 this or you can take any of these libs from Android-Arsenal