1 在显示视频图片列表时,发送彩信时,制作幻灯片时都需要显示视频或图片的缩略图,显示代码如下:
//importimport 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; }
?