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

如果我正在写一个应用程序将一些文件永久存储外部存储(所以它们在应用程序退出(被销毁)之后仍然存在),但是在卸载时我希望做一些体面的事情删除文件以释放存储空间。

有没有什么办法可以在卸载时删除这些文件?

如果没有(我怀疑),那么我将不得不每次创build这些文件。 我试图节省启动时间,并通过让它们永久存在而占据所需的空间。

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

Solutions Collecting From Web of "Android:在卸载时从外部存储删除应用关联的文件?"

不,我不这么认为。 只有当您的应用程序被卸载时(或者如果用户在应用程序设置应用程序中按下“清除数据”button),您将写入内部存储的文件才会被删除。

你的应用程序也不能收到它自己的PACKAGE_REMOVED广播意图,所以你基本上没有通知你正在被卸载。

其实这是可能的。

android会自动删除外部存储中应用程序的文件,但这些文件必须在应用程序的特定path中:

“….. /安卓/数据/ APP_PACKAGE_NAME /”

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

“….. / Android / obb / APP_PACKAGE_NAME /”其中APP_PACKAGE_NAME是应用程序的软件包名称。

数据是用于任何你想要的。 obb文件夹是用于使用play-store和apk扩展库下载的大文件。 你不应该在那里创build文件。

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

 File dir = getExternalFilesDir(null); 

这将在/Android/data/your.package/创build一个文件夹。 请注意,这不是在SD卡中的 外部 ,但它是公开的。 如果用户卸载您的应用程序,则该目录及其所有内容也将被删除。

引用CommonsWare的博客文章

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

  • 外部存储:如果您将文件写入到位于getExternalFilesDir()getExternalCacheDir() ,则会删除您的文件。 如果你在别的地方写了你的文件(比如Environment.getExternalStoragePublicDirectory() ),你的文件不会被删除

  • Android 4.4之前的可移动存储:可移动存储尚未正式访问; 如果你的文件在那里,那么当你的应用程序被卸载时不应该被删除

  • 可移动存储,Android 4.4+:AFAIK,如果您写入受支持的位置( getExternalFilesDirs()getExternalCacheDirs() ),则在卸载时如果该特定位的可移动存储位于设备中,则会删除该文件