Android删除图像文件后删除micro_kind缩略图

时间:2015-04-23 00:55:00

标签: android mediastore

我使用以下内容使用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或任何数据?

任何帮助都将不胜感激。

2 个答案:

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