在日常开发中,我们经常会使用MediaStore来获取手机的音频、图片、视频等相关信息。下面3个是常见的内部类:
MediaStore.Audio 获取音频信息的类
MediaStore.Images 获取图片信息
MediaStore.Video 获取视频信息
query和sql的插叙语句差不多 里面有5个参数
getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, mediaColumns, null, null, null);
第一个参数,uri,rui是什么呢?好吧,上面我们提到了Android提供内容的叫Provider,那么在Android中怎么区分各个Provider?有提供联系人的,有提供图片的等等。所以就需要有一个唯一的标识来标识这个Provider,Uri就是这个标识,android.provider.ContactsContract.Contacts.CONTENT_URI就是提供联系人的内容提供者,可惜这个内容提供者提供的数据很少。
第二个参数,projection,真不知道为什么要用这个单词,这个参数告诉Provider要返回的内容(列Column)
第三个参数,selection,设置条件,相当于SQL语句中的where。null表示不进行筛选。
第四个参数 selectionArgs,这个参数是要配合第三个参数使用的,如果你在第三个参数里面有?,那么你在selectionArgs写的数据就会替换掉?
第五个参数,sortOrder,按照什么进行排序,相当于SQL语句中的Order by
我已经写好几个用来经常查询的方法 直接粘贴使用
/** * 查找视频文件 * * @param context * @return */ public static ArrayList<VideoBeam> getVideoList(Context context) { ArrayList<VideoBeam> sysVideoList = new ArrayList<>(); // MediaStore.Video.Thumbnails.DATA:视频缩略图的文件路径 String[] thumbColumns = {MediaStore.Video.Thumbnails.DATA, MediaStore.Video.Thumbnails.VIDEO_ID}; // 视频其他信息的查询条件 String[] mediaColumns = {MediaStore.Video.Media._ID, MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DATA, MediaStore.Video.Media.TITLE, MediaStore.Video.Media.MIME_TYPE, MediaStore.Video.Media.DURATION, MediaStore.Video.Media.DATE_TAKEN,}; Cursor cursor = context.getContentResolver().query(MediaStore.Video.Media .EXTERNAL_CONTENT_URI, mediaColumns, null, null, null); if (cursor == null) { return sysVideoList; } if (cursor.moveToFirst()) { do { VideoBeam info = new VideoBeam(); int id = cursor.getInt(cursor .getColumnIndex(MediaStore.Video.Media._ID)); Cursor thumbCursor = context.getContentResolver().query( MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, thumbColumns, MediaStore.Video.Thumbnails.VIDEO_ID + "=" + id, null, null); if (thumbCursor.moveToFirst()) { info.setThumbPath(thumbCursor.getString(thumbCursor .getColumnIndex(MediaStore.Video.Thumbnails.DATA))); } info.setFilePath(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media .DATA))); info.setMimeType(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Vi