我创建了一个创建文件并将文件存储到SD卡的应用程序。有没有办法将文件夹与应用程序绑定,以便在用户在Android设备上运行卸载时删除所有文件?
答案 0 :(得分:23)
似乎自2009年以来出现了一些发展:)。
如果您使用的是API Level 8或 更大,请使用
getExternalCacheDir()
打开一个代表该文件的文件 外部存储目录所在的位置 应保存缓存文件。如果是用户 卸载你的应用程序,这些 文件将被自动删除。 但是,在你的生命中 应用程序,你应该管理这些 缓存文件并删除那些文件 为了保存,不需要 文件空间。如果您使用的是API级别7或更低级别, 使用
getExternalStorageDirectory()
来 打开一个代表root的文件 的外部存储,然后写 您的缓存数据如下 目录:/ Android设备/数据高速缓存// / 这是你的Java风格 包名称,如 “com.example.android.app”。
答案 1 :(得分:12)
您的应用程序无法知道它正在被卸载(不修改内核)。卸载应用程序后,将自动删除data/data/your.app.package
中创建的所有文件。
我认为没有从SD卡中清除任何内容。你可以做一个快速测试并找到它。
另一种方法可能是让另一个应用程序检查是否安装了此应用程序。如果没有,它可以进行清理工作。
答案 2 :(得分:4)
即使使用getExternalCacheDir()
,我也看到缓存目录(即您的应用程序包名称)未按照Android文档中的说明自动删除,至少在Lenovo 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(...)将为true,你可以在那里做一些清理。
我知道这不会直接回答问题,将未使用的数据留在用户的设备上并不好,但我认为这可能是在删除应用程序时尝试清理的替代方法,这是明智的但是似乎不可能。
答案 3 :(得分:4)
我之所以添加这个,是因为现有答案在2017年已经过时。 尽管app卸载没有回调,但已经提供了一些机制来保存除卸载之外的应用数据。
自Android 6.0(API 23)以来,Auto Backup for Apps 引入了一项功能,允许开发人员允许或阻止自动应用程序备份。从API 23开始,默认情况下启用备份。
为清单文件引入了两个新的application
代码:android:allowBackup
和android:fullBackupContent
。
要退出自动备份,请将android:allowBackup="false"
添加到application
标记下的清单文件中。值" true"将自动将共享首选项和数据库保存到云端,以及other files。
其次,您可以非常具体地了解要删除的文件 包含 或 排除 使用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>
您可以在此处添加要包含或排除的特定文件类型及其关联路径。将android:fullBackupContent = "@xml/my_backup_rules"
标记添加到application
标记下的清单文件中。
指定的文件将在设备的主电子邮件帐户下备份到Google云端硬盘。如果用户启用了以下设置,则会在重新安装时恢复数据:
Settings -> Backup & Reset -> Automatic Restore
。
还应注意,用户或设备上的其他应用程序无法读取备份数据。
也可以从Google Drive应用中访问相同内容:
Google Drive -> Settings -> Auto backup for apps -> Backup and reset
值得注意的是,如果将相同的主要 Google帐户用于多个设备,则会创建多个设备备份。可以从此处访问各个设备的备份:
Google Drive -> Settings -> Backups
答案 4 :(得分:3)
返回外部文件系统上目录的绝对路径 (这是在Environment.getExternalStorageDirectory()的某处) 应用程序可以放置它拥有的持久文件。这些文件是 对应用程序是私有的,并且通常对用户不可见 媒体。
这就像getFilesDir()一样,这些文件将被删除 应用程序已卸载
答案 5 :(得分:0)
如果要存储大数据,则将其存储在具有文件路径名的外部存储中,例如
Environment.getExternalStorageDirectory().toString()+"/Android/data/packageName"
其中包名称是您的应用包名称,例如com.think.abc