Android - 在卸载时保留或删除应用程序创建的文件

Nik*_*lin 24 backup android uninstall android-lifecycle android-backup-service

我创建了一个创建文件并将文件存储到SD卡的应用程序.有没有办法将文件夹与应用程序绑定,以便在用户在Android设备上运行卸载时删除所有文件?

ron*_*y l 23

似乎自2009年以来有一些发展:).

文档:

如果您使用的是API级别8或更高级别,请使用getExternalCacheDir()打开表示应保存缓存文件的外部存储目录的文件.如果用户卸载了您的应用程序,则会自动删除这些文件.但是,在应用程序的生命周期中,您应该管理这些缓存文件并删除不需要的缓存文件以保留文件空间.

如果您使用的是API级别7或更低级别,请使用getExternalStorageDirectory()打开表示外部存储根目录的文件,然后将缓存数据写入以下目录:

/ Android/data // cache /这是您的Java风格的包名,例如"com.example.android.app".


Pra*_*ast 12

您的应用程序无法知道它正在被卸载(不修改内核).data/data/your.app.package卸载应用程序后,将自动删除在其中创建的所有文件.

我不认为从SD卡中清除了任何东西.你可以做一个快速测试并找到它.

另一种方法可能是让另一个应用程序检查是否安装了此应用程序.如果没有,它可以进行清理工作.


Y.S*_*Y.S 8

我添加这个是因为现有的答案在 2017 年已经过时了。虽然没有关于应用程序卸载的回调,但已经提供了一些机制来保留卸载后的应用程序数据。

  • 自 Android 6.0 (API 23) 起,应用程序自动备份 引入功能,允许开发人员允许或阻止自动应用程序备份。从 API 23 开始,默认启用备份。

  • application为清单文件引入了两个新标签:android:allowBackupandroid:fullBackupContent.

要选择退出自动备份,请添加android:allowBackup="false"application标签下的清单文件中。“true”值将自动将共享首选项和数据库以及其他文件保存到云中

其次,您可以非常具体地说明要包含排除的文件,以便在卸载时使用android:fullBackupContent标记进行删除或保留。此属性指向包含备份规则的 XML 文件。res/xml/使用以下语法在目录中创建 XML 配置文件:

<full-backup-content>
    <include domain=["file" | "database" | "sharedpref" | "external" | "root"]
    path="string" />
    <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"]
    path="string" />
</full-backup-content>
Run Code Online (Sandbox Code Playgroud)

您可以在此处添加要包含或排除的特定文件类型及其关联路径。将android:fullBackupContent = "@xml/my_backup_rules"标签添加到标签下的清单文件中application

指定的文件将备份到设备主电子邮件帐户下的 Google Drive。如果用户启用了以下设置,则数据将在重新安装时恢复:

Settings -> Backup & Reset -> Automatic Restore.

还需要注意的是,备份数据不能被用户或设备上的其他应用程序读取。

在此处输入图片说明

也可以从这里从 Google Drive 应用程序访问相同的内容:

Google Drive -> Settings -> Auto backup for apps -> Backup and reset

在此处输入图片说明

值得注意的是,如果多个设备使用同一个Google 帐户,则会创建多个设备备份。可以从这里访问单个设备的备份:

Google Drive -> Settings -> Backups

Google 云端硬盘 -> 设置 -> 备份