您的位置:首页 > 大数据 > 人工智能

MediaStore.Video.Thumbnails.getThumbnail获取本地视频缩略图

2017-11-25 18:28 579 查看
原理:通过 CursorLoader读取本地媒体数据库

一 解决录制视频后  读取媒体 数据库时,没有最新录制数据的问题

    办法:通知媒体数据库更新:    

Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(file);
mediaScanIntent.setData(contentUri);
context.sendBroadcast(mediaScanIntent);
   注意:当文件夹里含有    .nomedia    文件是 自带文件管理器是读不到媒体数据的

二 利用CursorLoader读取媒体数据库 
private static final Uri QUERY_URI = MediaStore.Files.getContentUri("external");
private static final String ORDER_BY = MediaStore.Files.FileColumns._ID + " DESC";
    读取数据库的字段: // 媒体文件数据库字段
private static final String[] PROJECTION = {
MediaStore.Files.FileColumns._ID,
MediaStore.MediaColumns.DATA,
MediaStore.MediaColumns.MIME_TYPE,
MediaStore.MediaColumns.WIDTH,
MediaStore.MediaColumns.HEIGHT,
DURATION};
// 只获取视频
String video_condition =
getSelectionArgsForSingleMediaCondition(getDurationCondition(0, 0));
String[] MEDIA_TYPE_VIDEO = getSelectionArgsForSingleMediaType(
MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO);
cursorLoader = new CursorLoader(
activity, QUERY_URI, PROJECTION, video_condition, MEDIA_TYPE_VIDEO, ORDER_BY);



读完数据库后  拿到  cursor

  获取媒体库的id   

int media_id = data.getInt(data.getColumnIndexOrThrow(PROJECTION[0]));

  通过id  可以获取对应的视频缩略图

Bitmap bitmap = MediaStore.Video.Thumbnails.getThumbnail(context.getContentResolver(),
media_id, MediaStore.Video.Thumbnails.MINI_KIND, null);这是个耗时操作   ,,如果在recycle里展示   切记在viewholder里开异步加载流畅  
MediaStore.Video.Thumbnails.MINI_KIND      清晰度高于
MediaStore.Video.Thumbnails.MICRO_KIND



三recycler里展示本地视频时,,通过读取媒体库缩略图展示

   解决滑动的时候viewholder复用  滑动出去一异步还加载的问题:

  重写  view回收方法   获取回收的viewHolder  回收时 停止异步任务 @Override
public void onViewRecycled(RecyclerView.ViewHolder holder) {
super.onViewRecycled(holder);
ViewHolder contentHolder = (ViewHolder) holder;
ImageAsyncTask asyncTask = (ImageAsyncTask) contentHolder.contentView.getTag();
if (null != asyncTask) {
asyncTask.cancel(true);
}
}

源码

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息