2015-04-23 138 views
0

我使用下面的填充與MICRO_KIND縮略圖一個GridView:的Android刪除圖像文件刪除後micro_kind縮略圖

/* 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}); 

順便說arrPath是使用下面的mediastore檢索:

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

希望這會幫助別人。我設法刪除從mediastore因此使用MICRO_KIND縮略圖條目中的以下內容:

Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
      id); 
    cr.delete(uri,null,null); 
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的回答 刪除縮略圖希望這可以幫助