Android 删除图像文件后删除 micro_kind 个缩略图
Android deleting the micro_kind thumbnails after image file deletion
我正在使用以下 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 卡进行 unmount/mount。
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});
顺便说一句,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();
}
});
那么我如何从数据库中删除这个条目,以便在文件删除后刷新图像光标时图像光标为空并且没有 MICRO_KIND 或返回任何与此相关的数据???
如有任何帮助,我们将不胜感激。
希望这对其他人有所帮助。我设法从 mediastore 中删除条目,因此 MICRO_KIND 使用以下缩略图:
Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
id);
cr.delete(uri,null,null);
我遇到了同样的问题,无论我做了什么,我都找不到删除 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 的回答删除缩略图
希望这有帮助
我正在使用以下 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 卡进行 unmount/mount。
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});
顺便说一句,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();
}
});
那么我如何从数据库中删除这个条目,以便在文件删除后刷新图像光标时图像光标为空并且没有 MICRO_KIND 或返回任何与此相关的数据???
如有任何帮助,我们将不胜感激。
希望这对其他人有所帮助。我设法从 mediastore 中删除条目,因此 MICRO_KIND 使用以下缩略图:
Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
id);
cr.delete(uri,null,null);
我遇到了同样的问题,无论我做了什么,我都找不到删除 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 的回答删除缩略图 希望这有帮助