我正在创建一个自定义图像和视频库,就像Whatsapp必须允许用户选择多个图像/视频,到目前为止我正在填充并在gridview上显示缩略图。但结果是,在某些设备上,图像有时会显示重复,有些他们没有。视频库也是如此。
我正在查询来自
的图像ID MediaStore.images
并使用
获取缩略图MediaStore.images.thumbnails.getThumbnail
来自获得的ID
下面是我的代码
final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media.DATE_ADDED;
imageCursor = activity.managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,null, orderBy+" DESC");
int image_column_index = imageCursor.getColumnIndex(MediaStore.Images.Media._ID);
int count = imageCursor.getCount();
thumbnails = new Bitmap[count];
arrPath = new String[count];
Log.d("count ", ""+count);
int i=0;
for ( i= 0; i <count; i++)
{
imageCursor.moveToPosition(i);
int id = imageCursor.getInt(image_column_index);
int dataColumnIndex = imageCursor.getColumnIndex(MediaStore.Images.Media._ID);
thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(), id,MediaStore.Images.Thumbnails.MICRO_KIND, null);
arrPath[i]= imageCursor.getString(dataColumnIndex);
}
来自android documentation getThumbnail的如果不可用,则应创建缩略图。
产生同样问题的一个例子是MediaStore.Images.Thumbnails.getThumbnail returns wrong thumbnail instead of NULL,但是那个人还没有找到解决方案(2年前问过这个问题)。
有没有人遇到过这个问题,我已经经历了很多例子并添加了更多我在asynctask中加载游标所以填充thubnails应该不是Adroid OS的问题我猜。是否有可用于这个问题的解决方案?它相当令人沮丧。
答案 0 :(得分:1)
我不确定您是否已找到问题的解决方案,但我遇到了类似的问题。我的应用程序正在返回没有指向任何内容的缩略图uri。但是调用ThumbnailUtils.createVideoThumbnail()会修复内容解析器中的引用。我最终将类似下面的东西放到我的应用程序中:
Bitmap bitmap = Thumbnails.getThumbnail(mActivity.getContentResolver(), videoFile.mId,
Thumbnails.MINI_KIND, null);
if (bitmap == null) {
ThumbnailUtils.createVideoThumbnail(videoFile.mAbsolutePath, Thumbnails.MINI_KIND);
}
然后我告诉我的适配器更新受影响的元素。