android 获取本地视频文件以及缩略图
来源:互联网 发布:淘宝苹果组装机 编辑:程序博客网 时间:2024/04/30 15:15
特别感谢:http://blog.csdn.net/qq_27062249/article/details/53462266
这个问题其实并不难,但是一开始想错了方向,主要还是知识储备太少,菜鸟一只,所以走了很多弯路,现在记录下来。
首先,第一张方法,也是我一开始用的方法:
/** * 从本地得到所有的视频地址 */ private List<EntityVideo> getVideoFromSDCard(Context context) { List<EntityVideo> list = new ArrayList<>(); String[] projection = new String[]{MediaStore.Video.Media.DATA, MediaStore.Video.Media .DURATION}; Cursor cursor = context.getContentResolver().query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, null, null, null); while (cursor.moveToNext()) { String path = cursor .getString(cursor .getColumnIndexOrThrow(MediaStore.Video.Media.DATA)); long duration = cursor .getInt(cursor .getColumnIndexOrThrow(MediaStore.Video.Media.DURATION)); // EntityVideo video = new EntityVideo(path, duration, getVideoThumbnail(path)); // list.add(video); } cursor.close(); return list; }
这种方法是获取本地视频,但是没有缩略图,我的缩略图是下面这种方法获取的,也是网上大部分的方法:
// 获取视频缩略图 public Bitmap getVideoThumbnail(String filePath) { Bitmap b=null; MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(filePath); b=retriever.getFrameAtTime(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (RuntimeException e) { e.printStackTrace(); } finally { try { retriever.release(); } catch (RuntimeException e) { e.printStackTrace(); } } return b; }
这种方法就是获取视频的地址,然后获取缩略图,但是在我的项目里面我感到怎么都不满意,加载图片的速度太慢啦。无意间发现下面这种方法,原来,contentProvider已经提供了本地视频的缩略图获取方法,代码如下:
public List<EntityVideo> getList(Context context) { List<EntityVideo> 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.DATA, MediaStore.Video.Media.DURATION}; Cursor cursor = context.getContentResolver().query(MediaStore.Video.Media .EXTERNAL_CONTENT_URI, mediaColumns, null, null, null); if (cursor == null) { return sysVideoList; } if (cursor.moveToFirst()) { do { EntityVideo info = new EntityVideo(); 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.setPath(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media .DATA))); info.setDuration(cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video .Media.DURATION))); sysVideoList.add(info); } while (cursor.moveToNext()); } return sysVideoList; }
其实Android内部已经对本地视频生成了缩略图,第二种方法是直接提取Android生成的缩略图,这样比自己重新生成快的多。再次鸣谢上面链接的作者。学习啦。
1 0
- android 获取本地视频文件以及缩略图
- android系统获取本地视频文件的缩略图
- 获取本地视频文件的缩略图
- Android获取网络视频文件缩略图
- [Android] 本地视频文件的缩略图实现方案
- 关于Android查询本地视频文件、获取缩略图,并且让缩略图以相同大小显示、给缩略图添加白色边框效果
- Android中如何获取视频文件的缩略图
- Android中如何获取视频文件的缩略图
- Android中如何获取视频文件的缩略图
- Android中如何获取视频文件的缩略图
- Android中如何获取视频文件的缩略图
- Android中如何获取视频文件的缩略图
- Android必知必会-获取视频文件的截图、缩略图
- 获取视频文件的缩略图
- 获取视频文件缩略图
- 图片,音频,视频文件的上传 以及图片缩略图的制作,音频文件时长的获取以及 视频文件缩略图的获取
- android调用本地音视频文件获取信息
- Android获取SD卡上图片和视频文件及其缩略图
- Eclipse 安装 SVN 插件的两种方法
- Appium 报错:org.openqa.selenium.NoSuchWindowException: no such window: target window already closed
- 在低版本ie浏览器:hover丢失
- 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
- 公钥密码之RSA密码算法扩展欧几里德求逆元!!
- android 获取本地视频文件以及缩略图
- c++的继承与虚继承
- 洛谷P1218 特殊的质数肋骨
- 斐波那契
- UICollectionView
- 字符串全排列算法学习总结
- 图片处理.md
- Android 大批量图片显示时候如何避免OOM
- Java JDBC基础