Android:在卸载时从外部存储中删除应用相关文件?

时间:2010-01-01 22:47:43

标签: android storage external uninstall

如果我正在编写的应用程序将一些文件永久存储到外部存储器(因此它们在应用程序退出[已销毁]后仍然存在)会很方便,但在卸载时我想做一些体面的事情并删除这些文件以释放存储空间。

有没有办法在卸载时删除这些文件?

如果没有(并且我持怀疑态度),那么我每次都必须创建这些文件。我试图节省启动时间,并通过永久存在来占用所需的空间。

注意:我需要使用外部存储,因此内部存储或数据库都不合适。

4 个答案:

答案 0 :(得分:10)

实际上它是可能的。

android会自动删除外部存储中的应用程序文件,但文件必须位于应用程序的特定路径中:

“..... / Android设备/数据/ APP_PACKAGE_NAME /”

其中APP_PACKAGE_NAME是应用程序的包名称。 另一条自动清空的路径是:

“..... / Android设备/ OBB / APP_PACKAGE_NAME /” 其中APP_PACKAGE_NAME是应用程序的包名称。

数据适用于您想要的任何内容。 obb文件夹用于使用Play商店和apk extension library下载的大文件。你不应该在那里创建文件。

答案 1 :(得分:7)

不,我不相信。卸载应用程序时(或者如果用户按下应用程序设置应用程序中的“清除数据”按钮),将仅删除您写入内部存储的文件。

您的应用也无法收到自己的PACKAGE_REMOVED广播意图,因此您基本上没有通知您正在卸载。

答案 2 :(得分:3)

是的,这是可能的。只需将文件写入外部文件目录:

File dir = getExternalFilesDir(null);

这将在/Android/data/your.package/创建一个文件夹。请注意,这不是 sdcard 中的外部,但可以公开访问。如果用户卸载了您的应用,则此目录也将被删除,以及其所有内容。

答案 3 :(得分:2)

Quoting from the blog post of CommonsWare

  • 内部存储:您的文件已删除

  • 外部存储:如果您将文件写入以getExternalFilesDir()getExternalCacheDir()为根的位置,则会删除您的文件。如果您将文件写入其他位置(例如Environment.getExternalStoragePublicDirectory()),则不会删除您的文件

  • Android 4.4之前的可移动存储:可移动存储无法正式访问;如果您的文件在那里结束,则在卸载您的应用程序时不应删除该文件

  • 可移动存储,Android 4.4 +:AFAIK,如果您写入受支持的位置(getExternalFilesDirs()getExternalCacheDirs()),如果可移动存储的特定位于卸载时的设备