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

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

Solutions Collecting From Web of "Android – 保留或删除应用程序在卸载时创build的文件"

您的应用程序无法知道它正在被卸载(无需修改内核)。 在data / data / your.app.package中创build的所有文件都会在安装后自动删除。

我不认为从SD卡上清除任何东西。 你可以做一个快速的testing,并找出答案。

另一种方法可能是让另一个应用程序检查这个应用程序是否安装。 如果没有,可以做清理工作。

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

从文档 :

如果您使用的是API Level 8或更高版本,请使用getExternalCacheDir()打开一个File,该File代表保存caching文件的外部存储目录。 如果用户卸载您的应用程序,这些文件将被自动删除。 但是,在应用程序的生命周期中,您应该pipe理这些caching文件并删除不需要的文件以保留文件空间。

如果您使用API​​ Level 7或更低版​​本,请使用getExternalStorageDirectory()打开一个表示外部存储根目录的File,然后将caching数据写入以下目录:

/ Android / data // cache /这是你的Java风格的包名,比如“com.example.android.app”。

即使在使用getExternalCacheDir() ,我也已经看到,应用程序包名称的caching目录不会像Android文档中所述的那样自动删除,至less在联想A1上不会。 这可能有点天真,但您可能需要在重新安装期间清理以前的数据。 在那里,你可以找出你的应用程序是否是第一次安装或者正在安装的 – 你可以使用共享偏好来存储一个值,也许是一个布尔值。 它可以是这样的:

 SharedPreferences sharedPrefs = getSharedPreferences(INSTALL_PREFS, MODE_PRIVATE); if(sharedPrefs.getBoolean("AppInstalled", false) == false){ //DELETE APP DIRECTORY SharedPreferences.Editor editor = sharedPrefs.edit(); editor.putBoolean("AppInstalled", true); editor.commit(); } 

这样,每次运行应用程序,它都会检查它是否是第一次运行。 当应用程序被删除时,应用程序的共享首选项也将被删除。 然后,下次安装时,if(…)将是真实的,你可以做一些清理。

我知道这并不直接回答这个问题,在用户的设备上留下未使用的数据是不好的,但是我认为这可能是一个清除应用程序被删除时的清除,这是明智的,但似乎是不可能的。

从那以后似乎有一个适当的soltuion, Context.getExternalFilesDir() :

返回外部文件系统(位于Environment.getExternalStorageDirectory())某处的目录的绝对path,应用程序可以在其中放置拥有的持久性文件。 这些文件对于应用程序来说是私有的,对于用户来说通常不可见的媒体。

这就像getFilesDir()一样,在卸载应用程序时这些文件将被删除

我添加了这个function,因为现有的答案在2017年已经过时。虽然确实应用程序卸载时没有callback,但为卸载应用程序数据提供了一些机制。

  • 自从Android 6.0(API 23)以来,引入了“ 自动备份应用程序”function,允许开发人员允许或阻止自动应用程序备份。 从API 23开始,默认情况下启用备份。

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

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

其次,你可以非常具体地关于你想包括排除的文件,以删除或保存与android:fullBackupContent标签卸载。 该属性指向包含备份规则的XML文件。 使用以下语法在res/xml/目录中创build一个XMLconfiguration文件:

 <full-backup-content> <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> </full-backup-content> 

在这里,您可以添加特定文件types以包含或排除及其关联的path。 将android:fullBackupContent = "@xml/my_backup_rules"标记添加到application标记下的清单文件中。

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

Settings -> Backup & Reset -> Automatic Restore

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

在这里输入图像说明

同样可以从这里的Google云端硬盘应用程序访问:

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

在这里输入图像说明

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

Google Drive -> Settings -> Backups

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

如果要存储大量数据,请将其存储在具有文件path名称的外部存储器中,如

 Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName" 

包名称是您的应用程序包名称,例如com.think.abc