data class Music(
var id: Int= 0,
var name: String="",
var artist: String="",
var coverResId: ByteArray? = null,
var musicFileRedId: Uri? =null
)
fun getMusicFromFile(context: Context): List<Music> {
val directory =
File(Environment.getExternalStoragePublicDirectory("Music").toString())
val mp3files: Array<File> = directory.listFiles(object : FileFilter {
override fun accept(pathName: File?): Boolean {
if (pathName != null) {
return pathName.name.endsWith(".mp3")
}
return false
}
}) as Array<File>
val mediaMetadataRetriever = MediaMetadataRetriever()
val list = ArrayList<Music>()
for (f in mp3files) {
val music = Music()
val uri = Uri.fromFile(f)
mediaMetadataRetriever.setDataSource(context, uri)
music.name = f.name.toString()
music.artist = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE).toString()
music.musicFileRedId = f.toUri()
music.coverResId = mediaMetadataRetriever.embeddedPicture
list.add(music)
}
return list
}
دسترسی به فایل رو هم توی قسمت android Manifest قرار بدید
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
دقت کنید که یا از تو تنظیمات گوشی یا تعریف کردن runtime permission توی کدتون دسترسی به فایل رو توی گوشیتون فعال کنید.