【问题标题】:Delete file on Android SD card删除 Android SD 卡上的文件
【发布时间】:2014-09-03 16:00:27
【问题描述】:

在我的应用程序中,我可以使用以下代码拍照并保存:

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

【问题讨论】:

  • 在代码周围使用 try catch 块,看看是否有任何异常。
  • 不抛出异常
  • 我发现它可以在 Android 4.2 上运行,所以我猜这是 Android KitKat 的问题。那里的 API 发生了一些变化,但我认为没问题?
  • 是的,对于 android 4.4+,我们只能删除包特定的文件。文档说“不得允许应用程序写入辅助外部存储设备,除非在合成权限允许的特定包目录中。”
  • 是的,没错,但我将文件存储在getExternalFilesDir。我必须将其保存在其他位置吗?这不是特定于包的目录吗?

标签: android android-sdcard android-file


【解决方案1】:

通过一些快速搜索,我发现有时需要调用System.gc()。在您的f.delete() 之后拨打System.gc()

【讨论】:

  • 谢谢你,但我测试过,文件还在。
  • 我发现它可以在 Android 4.2(没有 System.gc)上运行,所以我猜这是 Android KitKat 的问题。您还有其他想法吗?
【解决方案2】:

KitKat 对应用程序可以或不可以访问文件的方式进行了一些更改。即使在外部存储中。

因为这是一个临时文件,我建议您将其重新定位到您自己的应用程序空间,例如 context.getCacheDir。这可能会奏效。

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多