安卓系统:我应该把临时文件保存在哪里?

8
我的应用程序允许用户创建和修改文件。我希望他们能够将文件作为电子邮件附件发送。因此,我需要先创建并写入临时文件,然后将其附加到电子邮件中。不幸的是,基于下面问题的唯一回答,似乎没有好的方法可以知道电子邮件应用程序何时完成对临时文件的处理。 Android:从我的应用程序发送带附件的电子邮件出现问题 由于我无法接收到有关电子邮件是否完成文件处理的通知,因此我删除临时文件的规则非常糟糕。它们类似于“在onPause和onCreate中检查临时文件;删除超过5分钟的任何文件”。
由于我的规则如此丑陋,我特别关注应该将文件写在哪里。我不能将它们写入内部缓存目录,因为它们的大小可能大大超过1mb。在设备的sdcard上创建一个文件夹“/sdcard/myapp_tmp”是否合理?这种情况的常见做法是什么?
1个回答

12
您可以使用Context的getExternalCacheDir()方法获取文件引用,以便在SD卡上存储文件。当然,您需要执行通常的检查,以确保外部存储已挂载且可写,但这可能是存储此类临时文件的最佳位置。您可能想要做的一件事情就是设置一个最大空间,您可以在缓存目录中使用该空间,每当您需要编写新的临时文件时,如果该文件超过了最大空间,则开始删除临时文件,从最旧的文件开始,直到有足够的空间。

编辑:或者,也许像这样的东西会起作用:

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    File externalRoot = Environment.getExternalStorageDirectory();
    File tempDir = new File(externalRoot, ".myAppTemp");
}

在文件夹前加上"."应该可以将其隐藏,我非常确定。

啊,原来如此。我已经添加了一个新的建议,适用于API级别1+。 - Kevin Coppock
"." 会使目录变为隐藏状态。非常好,谢谢。 - ab11
1
如果用户没有安装SD卡怎么办?如果用户的内部存储大于GB,他们就不会使用SD卡。 - nicky
3
即使设备内存容量为GB级别,仍有外部存储目录和外部缓存目录的路径可用,因此请不要担心这个问题。 - Yogesh Maheshwari
我正在使用getExternalCacheDir来存储我的临时文件以便通过电子邮件发送...系统/Android什么时候清理缓存目录?我不希望我的文件在发送邮件时被删除...是否有最大缓存限制?我需要每封电子邮件最多25MB。 - yeahman
显示剩余2条评论

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