安卓自身带有内容解析者,只要将查询的参数写对,就可以获取所有的视频文件了。
先写个实体类,用于保存视频的信息
public class VideoInfo{
public String name;//视频文件名
public long size;//视频大小
public long durantion;//视频长度
public String url;//视频路径
@Override
public String toString() {
return "VideoInfo{" +
"name='" + name + '\'' +
", size=" + size +
", durantion=" + durantion +
", url='" + url + '\'' +
'}';
}
}
然后写个查询条件
String limit[] = {
MediaStore.Video.Media.DISPLAY_NAME,//视频名称
MediaStore.Video.Media.SIZE,//大小
MediaStore.Video.Media.DURATION,//长度
MediaStore.Video.Media.DATA,//播放地址
};
再用一个List来保存所有视频
List<VideoInfo> list = new ArrayList<>();
最后调用内容提供者来获取视频信息,之前最好判断一下SD卡是否挂载了
ContentResolver cr = getContentResolver();
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//sd卡已挂载
Cursor cursor = cr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,limit,null,null,null);
while (cursor.moveToNext()){
VideoInfo video = new VideoInfo();
video.name = cursor.getString(0);
video.size = cursor.getLong(1);
video.durantion = cursor.getLong(2);
video.url = cursor.getString(3);
list.add(video);
}
}
下面是我的测试结果:
手机中的视频信息:[VideoInfo{name='VID_20161002_183641.mp4', size=3009357, durantion=2581, url='/storage/emulated/0/DCIM/Camera/VID_20161002_183641.mp4'},
VideoInfo{name='VID_20161003_110003.mp4', size=73749429, durantion=72555, url='/storage/emulated/0/DCIM/Camera/VID_20161003_110003.mp4'}, VideoInfo{name='
VID_20161005_082642.mp4', size=81869598, durantion=80661, url='/storage/emulated/0/DCIM/Camera/VID_20161005_082642.mp4'}, VideoInfo{name='test.mp4', size=
17918237, durantion=259181, url='/storage/emulated/0/storage/emulated/0/test.mp4'}]
所有视频都获取到了。这样的方式只能获取非其他APP内部视频以外的所有视频文件,其他APP沙盘下面的文件的话,只能用别的方式获取到了。