我创建了一个应用程序,它可以在SD卡上创建和存储文件。有没有一种方法可以将该文件夹与应用程序绑定,以便在用户在Android设备上运行卸载时删除所有文件?
我创建了一个应用程序,它可以在SD卡上创建和存储文件。有没有一种方法可以将该文件夹与应用程序绑定,以便在用户在Android设备上运行卸载时删除所有文件?
看起来自2009年以来有一些进展 :).
根据文档:
如果您正在使用API级别8或更高版本,请使用
getExternalCacheDir()
打开代表外部存储目录的File,您应该在其中保存缓存文件。如果用户卸载您的应用程序,则这些文件将被自动删除。但是,在您的应用程序的生命周期内,您应该管理这些缓存文件并删除那些不需要的文件以保留文件空间。如果您正在使用API级别7或更低版本,请使用
getExternalStorageDirectory()
打开代表外部存储根目录的File,然后在以下目录中写入缓存数据:/Android/data/包名/cache/ 其中“包名”是您的Java风格的包名,例如“com.example.android.app”。
没有办法让您的应用程序知道它正在被卸载(无需修改内核)。data/data/your.app.package
中创建的所有文件都会在应用程序卸载时自动删除。
我认为sdcard中不会清除任何东西。您可以进行快速测试并找出答案。
另一种方法是拥有另一个应用程序,检查是否安装了该应用程序。如果没有,则可以进行清理工作。
NQ Mobile Security
正在调用卸载时的Activity,请查看http://i.imgur.com/Fos9N.png,http://i.imgur.com/fIZbK.png,http://i.imgur.com/cG9Hr.png和问题https://dev59.com/JWkv5IYBdhLWcg3w91lG。 - Gaurav Agarwal我添加这个信息是因为现有的答案在2017年已经过时。虽然卸载应用程序时没有回调,但是一些机制已经提供了超出卸载范畴的应用数据保存方式。
自Android 6.0(API 23)以来,应用自动备份功能被引入,允许开发人员允许或阻止自动应用备份。从API 23开始备份处于启用状态。
新增了两个application
标记,用于清单文件:android:allowBackup
和android:fullBackupContent
。
要退出自动备份,请在application
标记下添加android:allowBackup="false"
到清单文件中。值为“true”将自动将共享首选项和数据库保存到云端,以及其他文件。
<full-backup-content>
<include domain=["file" | "database" | "sharedpref" | "external" | "root"]
path="string" />
<exclude domain=["file" | "database" | "sharedpref" | "external" | "root"]
path="string" />
</full-backup-content>
android:fullBackupContent =“@xml / my_backup_rules”
标签添加到应用程序标记下的清单文件中。同样也可以从Google Drive应用程序访问此功能:
Google Drive -> 设置 -> 应用自动备份 -> 备份和重置
Google Drive -> 设置 -> 备份
getExternalCacheDir()
,我发现缓存目录(即您的应用程序包名称)并没有像Android文档中说的那样自动删除,至少在联想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();
}
看起来从那时起就有了一个适当的解决方案,Context.getExternalFilesDir():
返回应用程序可以将其拥有的持久文件放置在外部文件系统上(即某个位置Environment.getExternalStorageDirectory())的目录的绝对路径。这些文件是应用程序私有的,通常不会向用户显示为媒体文件。
这类似于getFilesDir(),因为这些文件将在卸载应用程序时被删除。
Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName"
其中包名是您的应用程序包名,例如 com.think.abc
NQ Mobile Security
正在调用卸载时的Activity,请查看http://i.imgur.com/Fos9N.png,http://i.imgur.com/fIZbK.png,http://i.imgur.com/cG9Hr.png和问题https://dev59.com/JWkv5IYBdhLWcg3w91lG。 - Gaurav Agarwal