10

我面临这个问题,当我卸载我的应用程序文件夹时,SD卡路径中仍然可用,

我应该怎么做才能删除它?

请提出一些建议以实现它...

4

4 回答 4

13

我应该怎么做才能删除它?

使用getExternalFilesDir()和/或getExternalCacheDir()用于外部存储(“sdcard”)上的文件。当您的应用程序被卸载时,这些目录会自动删除。

除此之外,没有其他可能,因为当您的应用程序被删除时您无法控制。

于 2013-04-13T14:00:52.037 回答
9

不幸的是,简单来说,答案是:不,你不能。

原因:

  1. 你需要广播,当你的应用程序被卸载时你可以收听。但是将要卸载的应用程序不会因为它的卸载而得到任何广播。

  2. 如果您在设备的外部存储上创建了任何文件夹,则当用户卸载您的应用程序时,您无法调用代码。

建议和解决方案:

  1. 唯一的方法是如果您使用getExternalCacheDir(), 则只有在卸载应用程序时会自动删除文件夹。

  2. 如果您的目标是 API 级别 8 或更高,您可以将Context#getExternalFilesDir()其用于您的外部文件,这些文件将在卸载时被删除。

于 2014-06-18T04:44:05.150 回答
2

一些读数:http: //developer.android.com/guide/topics/data/data-storage.html#filesExternal

如果您使用 API 级别 8 或更高版本,请使用 getExternalFilesDir() 打开一个文件,该文件代表您应该保存文件的外部存储目录。此方法接受一个类型参数,该参数指定您想要的子目录的类型,例如 DIRECTORY_MUSIC 和 DIRECTORY_RINGTONES(传递 null 以接收应用程序文件目录的根目录)。如有必要,此方法将创建适当的目录。(...)

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

/Android/data/"package_name"/files/

“package_name”是您的 Java 风格的包名称,例如“com.example.android.app”。

如果用户的设备运行 API 级别 8 或更高版本并且他们卸载了您的应用程序,则此目录及其所有内容将被删除。

于 2013-04-13T14:08:16.657 回答
0

卸载应用程序后,您将无法运行代码,因此您必须允许操作系统为您进行清理。这意味着您不能将文件放在 SD 卡上的任何位置,而必须遵循操作系统的规则。

因此,您不必在 SD 卡上创建自己的目录结构,而是必须将编写的文件放在调用getExternalFilesDir()和返回的目录中getExternalCacheDir()。然后,Android 在卸载时会自动删除这些目录的所有内容。

于 2014-06-17T13:09:18.303 回答