android 获取视频跟图片的缩略图
1 在显示视频图片列表时,发送彩信时,制作幻灯片时都需要显示视频或图片的缩略图,显示代码如下:
//import import android.content.ContentResolver; import android.content.ContentUris; import android.graphics.Bitmap; import android.provider.MediaStore.Video; import android.widget.ImageView; //ImageView控件 private ImageView mImagePreview; //............................. //初始化ImageView mImagePreview = (ImageView) findViewById(R.id.image_preview); //video为视频文件对应的uri long id = ContentUris.parseId(video); ContentResolver mContentResolver = mContext.getContentResolver(); //缩略图类型:MINI_KIND FULL_SCREEN_KIND MICRO_KIND Bitmap miniThumb = Video.Thumbnails.getThumbnail(mContentResolver, id, Video.Thumbnails.MINI_KIND, null); //填充图片 mImagePreview.setImageBitmap(miniThumb); //...............................
或者使用
Bitmap bitmap = VideoAttachmentView.createVideoThumbnail(mContext,video); 来获取图片
2 在android.provider.MediaStore中包含对图片和视频的各种处理类,其中 android.provider.MediaStore.Images.Thumbnails 和android.provider.MediaStore.Video.Thumbnails提供了图片和视频生成缩略图的方法。
3 图片和视频的索引及其与对应缩略图的对应关系在 /sdcard/data/data/com.android.providers.media/databases中的db文件中,
图片对应表images和thumbnails
images
_id 图片id
_data 图片路径
thumbnails
_id 缩略图id
_data 缩略图存储位置
image_id 对应原图id
视频对应表images和thumbnails
video
_id 视频id
_data 视频路径
videothumbnails
_id 视频缩略图id
_data 视频缩略图存储位置
image_id 对应视频id
4 以获取视频的缩略图为例,具体步骤如下:
1 获取视频的uri
2 转换为String,得到视频id
3 去videothumbnails表中找到视频缩略图路径
4 根据路径得到图片
5 其他可参考:获取Android手机上的图片和视频缩略图
大家都知道Android从1.5开始刚插入SD卡时系统会调用MediaScanner服务进行后台扫描,索引新的歌曲、图片和视频等信息,如果我们需要快速提取图片和视频缩略图可以直接访问 android.provider.MediaStore.Images.Thumbnails 和android.provider.MediaStore.Video.Thumbnails这两个数据库,即可查询出来缩略图 |
/** * 获取图片、视频、音乐列表 */ public List<FileModel> getFileList(Uri uri) { String fileType = null; //判断类型 if (uri==imageUri) { fileType="0"; }else if (uri==audioUri) { fileType="1"; }else if (uri==videoUri) { fileType="2"; } Uri fileUri=uri; List<FileModel> fileList = new ArrayList<FileModel>(); Cursor cur = mContext.getContentResolver().query(fileUri, null, null, null, null); try { while (cur.moveToNext()) { String id = cur.getString(cur.getColumnIndexOrThrow(MediaStore.Images.Media._ID)); //音乐图片视频都是同一个"_display_name" String fileName = cur.getString(cur.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME)); //音乐图片视频都是同一个"_display_name" String filePath = cur.getString(cur.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)); long fileSize = cur.getLong(cur.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE)); //判断文件存在才插入。因为有些文件被删除了。数据库要重新开机才会更新 if (new File(filePath).exists()) { System.out.println(id); System.out.println(filePath); //_id图片id等于image_id 对应原图id //获取缩略图路径 String fileThumbnailPath=""; Cursor cur2 = mContext.getContentResolver().query(Thumbnails.EXTERNAL_CONTENT_URI, null, Thumbnails.IMAGE_ID+"=?" ,new String[]{id}, null); while (cur2.moveToNext()) { fileThumbnailPath = cur2.getString(cur2.getColumnIndexOrThrow(Thumbnails.DATA)); } FileModel model = new FileModel(); model.setFile(new File(filePath)); model.setFileName(fileName); model.setFilePath(filePath); model.setFileThumbnailPath(fileThumbnailPath); //设置缩略图路径 model.setFileSiz(MyMethods.formatSize(fileSize)); //格式化大小 model.setFileType(fileType); fileList.add(model); } } } catch (IllegalArgumentException e) { e.printStackTrace(); }finally{ if (cur != null) { cur.close(); } } return fileList; }