在系统启动、插拔USB的时候,系统会把SD卡上所有的音乐文件信息保存到数据库,可以使用Content Provider获取到所有信息:
ContentResolver cr = getApplication().getContentResolver(); if (cr == null) { return; } // 获取所有歌曲 Cursor cursor = cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); if (null == cursor) { return; } if (cursor.moveToFirst()) { do { String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE)); int duration = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); } while (cursor.moveToNext()); }
不过这存在一些缺点,我在模拟器上调试的时候,发现获取到的字符串,只要含有中文就是乱码,这可能是因为,音乐文件中相关信息在中国采用的是GBK编码,在英语国家采用的是其他编码造成的。