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 توی کدتون دسترسی به فایل رو توی گوشیتون فعال کنید.