我使用以下内容使用MICRO_KIND缩略图填充gridview:
/* Find images of interest */
imagecursor = getActivity().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CON TENT_URI,
columns,
MediaStore.Images.Media.DATA + " like ? ",
new String[]{"%/houseTab" + currentHouseNumber + "/%"},
null);
/* Retrieve MICRO_KIND Thumbnails */
int id = imagecursor.getInt(image_column_index);
thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
getActivity().getApplicationContext().getContentResolver(), id,
MediaStore.Images.Thumbnails.MICRO_KIND, null);
检索过程完美无缺;当我删除实际的图像文件时,我无法删除MICRO_KIND缩略图。这就是我现在正在使用的文件图像被删除但MICRO_KIND不会被删除,即使刷新后仍然可以在gridview中看到。要摆脱缩略图,我必须关闭设备或卸载/挂载SD卡。
int count = imagecursor.getCount();
int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
ContentResolver cr = getActivity().getApplicationContext().getContentResolver();
for (int i = 0; i < count; i++) {
new File(arrPath[i]).delete(); // Delete the actual image file
imagecursor.moveToPosition(i);
long id = imagecursor.getInt(image_column_index);
/* Delete the thumbnails ???? Not working */
cr.delete(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, MediaStore.Images.Thumbnails.IMAGE_ID +
"= ?",new String[]{"" + id});
顺便说一句,使用以下内容从mediastore检索arrPath:
int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
arrPath[i] = imagecursor.getString(dataColumnIndex);
我也试着删除缩略图,但也没有成功。
MediaScannerConnection.scanFile(
getActivity().getApplicationContext(),
new String[]{arrPath[i]},
null,
new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
refreshImages();
}
});
那么如何从数据库中删除此条目,以便在删除文件后刷新imagecursor的时间为imagecursor为空并且没有返回MICRO_KIND或任何数据?
任何帮助都将不胜感激。
答案 0 :(得分:0)
希望这会有助于其他人。我设法从mediastore删除条目,因此MICRO_KIND缩略图使用以下内容:
Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
id);
cr.delete(uri,null,null);
答案 1 :(得分:0)
我遇到同样的问题,无论我做什么,我都无法找到删除MICRO_KIND缩略图的方法,所以我浏览了MediaStore源代码并看到有对/的引用sdcard / DCIM / .thumbnails / .thumbdata3 - #####文件,它看起来像存储MICRO_KIND缩略图的那些。
MediaStore数据库保存指向/sdcard/DCIM/.thumbnails文件夹中缩略图文件的记录,因此当您从MediaStore中删除缩略图时,它还会删除该文件夹下的文件(看起来像是MINI_KIND缩略图)因为它们比MICRO_KIND大得多。
当我通过ADB删除/sdcard/DCIM/.thumbnails/.thumbdata--BLAHBLAH文件时,它解决了我的问题,加载了正确的缩略图,我发现文件立即被重新创建。
我也注意到当我像你一样通过ContentResolver删除文件,然后查询MINI_KIND缩略图时,它们总是正确加载。
所以我的答案(似乎更像是一种解决方法而不是答案)是从MediaStore查询MINI_KIND缩略图,并从中提取缩略图:
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 3;
Bitmap out = MediaStore.Images.Thumbnails.getThumbnail(contentResolver, imageId, MediaStore.Images.Thumbnails.MINI_KIND, opts);
out = ThumbnailUtils.extractThumbnail(out, 96, 96);
使用user2553585的答案删除缩略图 希望这有帮助