当我们想要制作一个音乐播放器进行播放歌曲时,如何查找出各个文件夹下的文件呢?原来android自带有多媒体扫描器mediascanner,当系统启动或者是SD卡重装时它会对系统内存或SD卡文件进行扫描,把视频文件和音频文件放入mediastore数据库中,并设置了内容提供者接口让我们对数据库进行查询。
我们可以利用内容解析者对查询数据库,代码如下:
new Thread(new Runnable() {
@Override
public void run() {
//定义内容解析者
ContentResolver resolver = getContentResolver();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] args = {
MediaStore.Audio.Media.DISPLAY_NAME,//音频文件在sdcard的名称
MediaStore.Audio.Media.DURATION,//音频总时长
MediaStore.Audio.Media.SIZE,//音频的文件大小
MediaStore.Audio.Media.DATA,//音频的绝对地址
MediaStore.Audio.Media.ARTIST,//音频的演唱者
};
Cursor cursor = resolver.query(uri, args, null, null, null);
MediaItem item;
if (cursor != null) {
list = new ArrayList<MediaItem>();
while (cursor.moveToNext()) {
item = new MediaItem();
item.setName(cursor.getString(0));
item.setDuration(cursor.getLong(1));
item.setSize(cursor.getLong(2));
item.setData(cursor.getString(3));
item.setArtist(cursor.getString(4));
list.add(item);
}
cursor.close();
}
}
}).start();
注意这是一个耗时操作,需要在新的线程中执行。此时我们可以得到音频的各种信息,并封装到集合中。