2012-08-26 28 views
3

我刪除文件這樣刪除的圖像仍然顯示在Android圖庫,直到我重新啓動

File fileToDelete = new File("filepath"); 
Boolean fileDeleted = fileToDelete.delete(); 

的fileDeleted是真實的,當我檢查DDMS該文件不存在,但emaulator如果我點擊它仍然顯示剛剛刪除的圖像。我必須重新啓動模擬器才能看到更改。

有沒有什麼方法可以在不必重新啓動emaulator的情況下查看更改?我正在使用eclipse

回答

2

這是關於Gallery如何顯示圖像文件。圖像文件的縮略圖緩存在MediaStore中,所有細節都存在於Mediastore contentProvider中。

刪除文件不會更新此數據庫。但是當你重新啓動模擬器時,Mediascanning是由android完成的。如果可以觸發MediaScanning,則圖庫將停止顯示文件

+0

我不手頭上有一個android我使用iPhone :)。這是如何在實際的電話上工作?直到手機關機再重新開機之前,圖像仍然可見。 – stack

+0

是的。如果您不更新MediaStore。你應該遵循@zapl的回答來做出正確的回答 – nandeesh

+0

我做了這件事,它修復了問題 //廣播Media Scanner Intent來觸發它 sendBroadcast(新Intent(Intent.ACTION_MEDIA_MOUNTED,Uri .parse(「file ://「 + Environment.getExternalStorageDirectory()))); – stack

-3

您需要在構建之前「清理」您的項目,並且它將解決問題。默認情況下,項目是使用「緩存」構建的,並不總是刪除以前構建的所有數據。

14

圖庫正在使用Android的媒體數據庫顯示媒體列表。刪除文件將不會反映到數據庫中,直到它再次掃描文件系統。例如,在重新啓動後完成。

您可以通過數據庫直接刪除文件,也可以強制它掃描剛剛刪除的文件或文件夾。

File fileToDelete = new File("filepath"); 
boolean fileDeleted = fileToDelete.delete(); 

// request scan  
Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
scanIntent.setData(Uri.fromFile(fileToDelete)); 
sendBroadcast(scanIntent); 
+0

在android 4.4上做這個工作嗎? – hadi

+0

@hadi我認爲你需要掃描你的文件所在的文件夾才能實際工作。 – zapl

+0

我已經改變了文件的路徑,現在它隱藏了。如果我掃描舊文件,它不會從圖庫中刪除縮略圖 – hadi

0

我用下面的代碼(也很像我的代碼創建一個視頻也告訴媒體系統有關文件的變化和正確地更新圖庫):

private void deleteVideo(String videoUrl) 
{ 
    File videoFile = new File(videoUrl); 
    if (!videoFile.delete()) 
    { 
     Log.e(TAG, "Failed to delete " + videoUrl); 
    } 
    else 
    { 
     MediaScannerConnection.scanFile(mContext,new String[] { videoUrl }, null, new MediaScannerConnection.OnScanCompletedListener() 
     { 
      public void onScanCompleted(String path, Uri uri) 
      { 
       Log.i("ExternalStorage", "Scanned " + path + ":"); 
       Log.i("ExternalStorage", "-> uri=" + uri); 
      } 
     }); 
    } 
} 
相關問題