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 的回答删除缩略图 希望这有帮助