如何在SD卡上创建应用特定的目录,当应用程序被卸载时应该删除该目录。

6
我希望能在设备上使用SD卡存储应用程序文件、图像、缓存文件等,并在应用程序中使用它们。我知道可以使用Context.getFilesDir() / Context.openFileOutput方法将它们保存在内部存储中,但我不想让我的应用程序使用内部存储来保存这些数据。那么有没有办法在SD卡上创建/保存所有应用程序特定的文件目录,但仍然能够让系统知道这些文件在应用程序卸载时需要被删除呢?或者在这种情况下有什么建议?编辑:我还想支持2.1版本。谢谢。

好的,谢谢大家的回复。如果我需要支持2.2之前的设备,似乎没有简单的方法来解决这个问题。所以我计划在设备上添加图片等到图库中,并尝试将其他所有内容暂时存储在内部存储器中。但是,如果它超过了一个阈值大小,我可能会重新设计它,将它们也存储在SD卡上,但依赖于无法删除它们的2.2之前的设备。如果有任何其他更好的替代建议,请告诉我。 - achie
3个回答

6

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

请注意,如果您使用的是SDK 2.2+,则可以允许用户将整个应用程序移动到SD卡中,因此您无需担心此目录的大小。


谢谢,我希望我的应用程序也能在2.1设备上运行。有关于如何实现这一点的建议吗? - achie
1
这里有一个非常好的页面,介绍如何实现这个功能:http://developer.android.com/guide/appendix/install-location.html如果你查看“向后兼容性”部分,它会展示一种方法,可以只允许2.2 SDK中的“移动到SD卡”功能。 - plowman

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

谢谢,但我想支持2.1版本。所以这对我来说行不通。 - achie

3

这是一个小技巧,但对我很有效...

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

请将'<package name>'替换为您的包名。
编辑:思考后,可能只有在Android版本从v2.2开始时才会在应用程序卸载时“清理”。

谢谢,我希望我的应用程序也能在2.1设备上运行。有关如何实现这一点的建议吗? - achie
1
@achie:不,我认为限制在于它只能在v2.2+上运行,因为它具有将应用程序安装/移动到外部存储的功能。不幸的是,正如已经提到的那样,卸载过程不允许应用程序知道它正在被卸载。您可以简单地检查版本号并将文件存储到内部存储器中以供pre-2.2使用,或者您认为这会成为一个问题(存储的文件大小等)? - Squonk
是的,我的应用程序还需要一个图库和缩略图的缓存以及许多其他文件。但是谢谢你们的回复。我想我不用担心自己删除所有的图库,让用户从图库应用程序中完成即可。至于其余部分,我可能需要使用SD卡。 - achie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接