2014-09-03 121 views
1

在我的應用程序可以拍攝照片,並使用此代碼保存:刪除文件

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

imageCaptureUri = Uri.fromFile(new File(context.getExternalFilesDir(null), 
         "tmp_image_" + String.valueOf(System.currentTimeMillis()) + ".jpg")); 

intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageCaptureUri); 
intent.putExtra("return-data", true); 

我想從我的SD卡使用此代碼刪除文件:

File f = new File(imageCaptureUri.getPath());    

if (f.exists() == true) 
{ 
    boolean state = f.delete(); 
    Toast.makeText(context, "" + state, Toast.LENGTH_LONG).show(); 
} 

Toast的輸出爲真,但該文件未在SD卡上刪除。我在Android KitKat上測試了它,但它也可以在較舊的Android版本上運行。你有什麼想法,爲什麼我不能刪除照片?

我在清單文件中使用了android.permission.WRITE_EXTERNAL_STORAGE

+0

在代碼中使用try catch塊,查看是否有任何異常。 – 2014-09-03 16:04:45

+0

無異常 – Cilenco 2014-09-03 16:09:33

+0

我發現它可以在Android 4.2上運行,所以我猜這是Android KitKat的問題。那裏的API已經改變了一點,但我認爲它是好的? – Cilenco 2014-09-03 16:16:07

回答

0

通過一些快速搜索,我偶爾會看到有時需要致電System.gc()。在您的f.delete()

+1

謝謝你,但我測試了它,該文件仍然存在。 – Cilenco 2014-09-03 16:10:04

+0

我發現它適用於Android 4.2(不含System.gc),所以我想這是Android KitKat的一個問題。你還有其他建議嗎? – Cilenco 2014-09-03 16:16:41

0

之後致電System.gc() KitKat對應用程序如何訪問或不訪問文件進行了一些更改。即使在外部存儲。

因爲這是一個臨時文件,我建議您將其重新定位到您自己的應用空間,如context.getCacheDir。這可能會起作用。