在我们的应用程序中,我们已经创建了文件夹,并通过我们的应用程序将一些图像存储在内部存储器中。我想在用户卸载应用程序时删除这些文件夹和图像。
这是我的代码,以及我当前的存储方式:
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);
}
答案 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是必需的。
所以,我的建议是:将自己的临时/私有文件放在应用程序的文件夹中,并将用户实际需要的文件(图像/音频/视频/文档/ ...)放在其他文件夹中