Cursor cursor = cr.query(suri, projection, selection, selectionArgs, null);
查询不能直接传入返回的URI, 否则报错查询不到. 此次方案为通过id查询 .
先编辑好搜索语句
Uri suri = null;
String selection = null;
String[] selectionArgs = null;
String column = "_data";;
String[] projection = null;
if (DocumentsContract.isDocumentUri(this, uri)) {
String docId = DocumentsContract.getDocumentId(uri);
suri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] split = docId.split(":");
String type = split[0];
selection = "_id=?";
selectionArgs = new String[]{
split[1]
};
// projection = new String[]{
// column
// };
} else {
suri = uri;
}
通过查询返回的id键位查询其他参数
ContentResolver cr = this.getContentResolver();
Cursor cursor = cr.query(suri, projection, selection, selectionArgs, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
cursor.getString(cursor.getColumnIndexOrThrow(column));
// 视频ID:MediaStore.Audio.Media._ID
// videoId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
// 视频名称:MediaStore.Audio.Media.TITLE
title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
// 视频路径:MediaStore.Audio.Media.DATA
videoPath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
// 视频时长:MediaStore.Audio.Media.DURATION
duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
// 视频大小:MediaStore.Audio.Media.SIZE
// size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));
// // 视频缩略图路径:MediaStore.Images.Media.DATA
// String imagePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
// // 缩略图ID:MediaStore.Audio.Media._ID
// int imageId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
// // 方法一 Thumbnails 利用createVideoThumbnail 通过路径得到缩略图,保持为视频的默认比例
// // 第一个参数为 ContentResolver,第二个参数为视频缩略图ID, 第三个参数kind有两种为:MICRO_KIND和MINI_KIND 字面意思理解为微型和迷你两种缩略模式,前者分辨率更低一些。
// Bitmap bitmap1 = MediaStore.Video.Thumbnails.getThumbnail(cr, imageId, MediaStore.Video.Thumbnails.MICRO_KIND, null);
// // 方法二 ThumbnailUtils 利用createVideoThumbnail 通过路径得到缩略图,保持为视频的默认比例
// // 第一个参数为 视频/缩略图的位置,第二个依旧是分辨率相关的kind
// Bitmap bitmap2 = ThumbnailUtils.createVideoThumbnail(imagePath, MediaStore.Video.Thumbnails.MICRO_KIND);
// // 如果追求更好的话可以利用 ThumbnailUtils.extractThumbnail 把缩略图转化为的制定大小
ThumbnailUtils.extractThumbnail(bitmap, width,height ,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
}
cursor.close();
}