卸载应用程序后如何删​​除文件和文件夹?

时间:2018-07-10 04:56:37

标签: android android-layout android-fragments android-internal-storage

在我们的应用程序中,我们已经创建了文件夹,并通过我们的应用程序将一些图像存储在内部存储器中。我想在用户卸载应用程序时删除这些文件夹和图像。

这是我的代码,以及我当前的存储方式:

public void cropImage(Uri sourceUri, String fileName) 
{
    File myDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
            + File.separator
            + getString(R.string.app_name) + File.separator + getString(R.string.app_name_images) + File.separator);
    if (!myDir.exists()) {
        myDir.mkdirs();
    }
    File outputFile = new File(myDir, fileName);

    UCrop.of(sourceUri, Uri.fromFile(outputFile)).start(this);
}

2 个答案:

答案 0 :(得分:4)

好吧,由于我们未获得有关卸载的任何回调信息,因此这似乎无法实现。

我在职业生涯中尝试过的事情:

BroadCast接收器:由于卸载了应用程序后,它将不再起作用,因此在OS上不再存在,因此将无法广播。

因此,他们无法删除在设备外部存储设备上创建的文件夹。

您可以做什么:

  • 使用getExternalCacheDir(),然后自动删除创建的文件夹 卸载应用程序时。

  • 如果您的应用程序目标是API级别8或更高版本,则可以对外部文件使用Context#getExternalFilesDir(),这些文件将在卸载时被删除。

答案 1 :(得分:2)

如果您将文件放置在文件系统上的随机位置,它们将不会被删除,并且您可能会留下垃圾文件。

如果将其很好地存储在属于您应用程序的文件夹中,它们将被自动删除。

好消息是,从某些Android版本(Kitkat-4.4)开始,如果所有文件都位于应用程序的文件夹中(链接here),则不需要存储权限:

  

从Build.VERSION_CODES.KITKAT开始,不需要权限即可   读取或写入返回的路径;它始终可供   调用应用程序。这仅适用于为包名称为生成的路径   调用应用程序。要访问属于其他软件包的路径,   清单权限.WRITE_EXTERNAL_STORAGE和/或   Manifest.permission.READ_EXTERNAL_STORAGE是必需的。

所以,我的建议是:将自己的临时/私有文件放在应用程序的文件夹中,并将用户实际需要的文件(图像/音频/视频/文档/ ...)放在其他文件夹中