【问题标题】:How to create Application specific directory on SDCard that should be deleted when the app is uninstalled如何在 SDCard 上创建应在卸载应用程序时删除的应用程序特定目录
【发布时间】:2011-06-14 17:59:04
【问题描述】:

我想使用设备的 SD 卡在设备上存储我的应用程序文件、图像、缓存文件等,并在我的应用程序中使用它们。我知道我可以使用 Context.getFilesDir() / Context.openFileOutput 方法将它们保存在内存中,但我不希望我的应用程序使用内存来保存这些数据。

那么有什么方法可以在 SD 卡上的目录中创建/保存所有应用程序特定文件,但仍然可以让系统知道这些文件在卸载应用程序时必须删除?

或者在这种情况下有什么建议。

编辑:我也想支持 2.1。

谢谢。

【问题讨论】:

  • 好的,谢谢您的回复。如果我必须支持 2.2 之前的设备,似乎没有简单的方法。因此,我计划将图像等添加到设备上的图库中,并尝试将其他所有内容暂时存储在内部存储器中。但是,如果它超过阈值大小,我可以重做此操作以将它们也存储在 sd 卡上,但依赖于无法为 2.2 之前的设备删除它们。如果有人有任何可能更好的替代建议,请告诉我。

标签: android


【解决方案1】:

您的应用程序在被删除时不会收到通知,因此您最好使用应用程序的私有目录(来自 getFilesDir())。卸载应用时,该目录会自动删除。

请记住,如果您使用的是 SDK 2.2+,您可以允许您的用户选择将整个应用程序移至 SD 卡,因此您不必担心此目录的大小。

【讨论】:

  • 谢谢,我希望我的应用程序也能在 2.1 设备上运行。有关如何执行此操作的任何建议?
  • 这里有一个很棒的页面来说明如何做到这一点:developer.android.com/guide/appendix/install-location.html 如果你在“向后兼容性”下查看它表明有一种方法只允许“移动到 sd 卡”功能2.2 SDK。
【解决方案2】:

应用程序私有的任何文件都应放置在 Context.getExternalFilesDir 返回的目录中,如果卸载应用程序,系统将负责删除该目录。 Link 可能会有所帮助。

【讨论】:

  • 谢谢,不过我也想支持2.1。所以这对我不起作用。
【解决方案3】:

这有点小技巧,但对我有用...

File myFilesDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/<package name>/files");
myFilesDir.mkdirs();

用你的包名替换'&lt;package name&gt;'

编辑:考虑一下,它可能只会在从 v2.2 开始的 Android 版本上卸载应用时“清理”。

【讨论】:

  • 谢谢,我希望我的应用程序也能在 2.1 设备上运行。有关如何执行此操作的任何建议?
  • @achie:不,我认为限制在于它可以在 v2.2+ 上运行,因为它能够将应用程序安装/移动到外部存储。不幸的是,正如已经提到的,卸载过程不允许应用程序知道它正在被卸载。您可以简单地检查版本号并将文件存储到 2.2 之前的内存中,还是您认为这会是一个问题(存储的文件大小等)?
  • 是的,我的应用程序还需要一个图库和一个缩略图缓存以及更多文件。但是谢谢你的回复。我想我不必担心自己删除所有画廊并让用户从画廊应用程序中执行此操作。其余的我可能不得不使用 SD 卡。
猜你喜欢
  • 1970-01-01
  • 2012-02-28
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
相关资源
最近更新 更多