在系统启动、插拔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编码,在英语国家采用的是其他编码造成的。