通过意图共享后删除文件

Mat*_*att 9 email android file delete-file android-activity

通过Android的Intent.ACTION_SEND功能共享临时文件后,我试图删除该文件。现在,我正在为结果启动活动,在OnActivityResult中,我正在删除文件。不幸的是,仅当我使用断点调试它时,此方法才有效,但是当我让它自由运行并说通过电子邮件发送文件时,该电子邮件没有附件。

我认为正在发生的事情是我的活动是在通过电子邮件发送文件之前删除该文件。我不明白的是为什么,不应该在其他活动结束后才调用onActivityResult吗?

我也尝试过删除onResume中的文件,但是没有运气。

有一个更好的方法吗?

mme*_*yer 5

我注意到了类似的行为。在查看logcat的错误时,我看到gmail抱怨找不到附件。因此,是的,似乎gmail实际已读取要附加的文件之前的意图返回。

我还没有找到解决方案,但是可能会是这样的:

  • 将文件移动到某个目录,所以我知道这是我决定发送的目录
  • 通过ACTION_SEND作为附件发送
  • 在我的“开始”屏幕活动的下一个onResume上,删除“已发送”目录中的文件,该文件早于一定时间范围的某个时间范围,该时间范围足够长以致于实际发生发送

选择适当的时间范围可能会比较棘手,因为在这种情况下,gmail(或其他ACTION_SEND提供程序)实际上不会读取文件,除非它具有网络连接。我认为24小时应该是合理的,在我的情况下,我正在处理诊断日志,因此,如果用户长时间不在网络中,那么删除一个过早的日志并没有真正的危害。

如果您的文件内容是文本并且不是很大,那么一个简单的方法可能是读取文件的内容,然后使用Intent.putExtra(android.content.Intent.EXTRA_TEXT,yourText)将其内联到消息正文中。


Mat*_*att 0

我已经设法让它工作:

File tbd = new File(sharePath);
tbd.deleteOnExit();
Run Code Online (Sandbox Code Playgroud)

这似乎会在活动关闭时删除该文件。

  • 不保证调用deleteOnExit()!根据开发人员文档:http://developer.android.com/reference/java/io/File.html#deleteOnExit() “请注意,在 Android 上,应用程序生命周期不包括 VM 终止,因此调用此方法将不能确保文件被删除。” (4认同)