卸载应用程序时如何删除文件和文件夹



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

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

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);
}

好吧,这似乎是不可能实现的,因为我们没有得到任何关于卸载的回调信息。

我在职业生涯中所尝试的:

BroadCast接收器:无法工作,因为一旦卸载应用程序,它在操作系统上就不存在了,因此无法获得广播。

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

您可以做什么:

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

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

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

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

好消息是,从一些Android版本(Kitkat-4.4(开始,如果你的所有文件都在应用程序的文件夹中,你不需要存储权限(链接此处(:

从Build.VERSION_CODES.KITKAT开始,不需要权限读取或写入返回的路径;它总是可以访问呼叫应用程序。这仅适用于为的包名称生成的路径调用应用程序。为了访问属于其他包的路径,Manifest.permission.WRITE_EEXTERNAL_STORAGE和/或需要Manifest.permission.READ_EEXTERNAL_STORAGE。

因此,我的建议是:将您自己的临时/私人文件放在应用程序的文件夹中,并将用户实际需要的文件(图像/音频/视频/文档/…(放在其他文件夹中

最新更新