2016-12-12 119 views
0

我的問題是,我從外部存儲中刪除圖像,並且黑色佔位符仍然存在,指的是刪除的圖像位置。從外部存儲刪除圖像後刷新圖庫

這裏是代碼請幫我把它弄出來。

在此先感謝。

String canonicalPath; 
     try { 
      canonicalPath = file.getCanonicalPath(); 
     } catch (IOException e) { 
      canonicalPath = file.getAbsolutePath(); 
     } 
     final Uri uri = MediaStore.Files.getContentUri("external"); 
     final int result = contentResolver.delete(uri, 
       MediaStore.Files.FileColumns.DATA + "=?", new String[]{canonicalPath}); 
     if (result == 0) { 
      final String absolutePath = file.getAbsolutePath(); 
      if (!absolutePath.equals(canonicalPath)) { 
       contentResolver.delete(uri, 
         MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath}); 
      } 
     } 

回答

0

我一直在爲我的音樂應用程序使用此功能,但也應該爲圖庫工作。 這首先找到所需條目的_id,然後構建正確的URI以提交給刪除查詢。

public void deleteFromMediaStore(String pathToDelete, Context context) { 
    ContentResolver contentResolver = context.getContentResolver(); 
    if (contentResolver != null) { 
     Cursor matchingIndex = contentResolver.query(Media.EXTERNAL_CONTENT_URI, new String[]{"_id", "_data"}, "_data=?", new String[]{pathToDelete}, null); 

     if(matchingIndex != null && matchingIndex.getCount() > 0) { 
      matchingIndex.moveToFirst(); 
      while (!matchingIndex.isAfterLast()) { 
       context.getContentResolver().delete(ContentUris.withAppendedId(Media.EXTERNAL_CONTENT_URI, (long) matchingIndex.getInt(matchingIndex.getColumnIndex("_id"))), null, null); 
       matchingIndex.moveToNext(); 
      } 
      matchingIndex.close(); 
     } 
    } 
} 
+0

不工作我要送以下路徑作爲字符串這種方法 「/存儲/模擬/0/Pictures/Sticker/stricker1.jpg「 這是正確的嗎? 這個圖像從這個位置刪除。 刪除這張圖片後,我打電話給deleteFromMediaStore()這個方法? –

+0

@Rinkukataria您的設備可能有問題。上面的代碼在一個生產應用程序中,它可以在數千個設備上工作。 – fillobotto

+0

是的,我明白。 matchingIndex.getCount()返回我0. 請告訴我要發送什麼路徑我正在發送/storage/emulated/0/Pictures/Sticker/stricker1.jpg「, File:/// storage/emulated/0 /Pictures/Sticker/stricker1.jpg「 我已經嘗試過這兩個路徑,但它不工作。請給我解釋一下。 –

0

您可以發送廣播

Intent intent = 
     new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
intent.setData(Uri.fromFile(file)); 
sendBroadcast(intent); 

,或者如果你想回調

MediaScannerConnection.scanFile(
     getApplicationContext(), 
     new String[]{file.getAbsolutePath()}, 
     null, 
     new OnScanCompletedListener() { 
     @Override 
     public void onScanCompleted(String path, Uri uri) { 

     } 
     }); 
+0

這兩種解決方案都不起作用。 –

相關問題