2

我正在开发一个小型应用程序,您可以在其中发送带有文件附件的电子邮件。发送电子邮件时,必须删除文件。我开始使用电子邮件意图startActivityForResult(emailIntent)并在onActivityResult(). 问题是 onActionResult() 在我按下电子邮件客户端中的发送按钮后立即调用,而不是在电子邮件实际发送时调用。我还读到这ACTION_SEND不是为您设计的startActivityForResult()。所以问题是何时/如何删除文件?我在想我可以运行一个Thread,它将检查文件是否未被任何其他进程使用,然后将其删除。问题可能是当应用程序被销毁时,线程被销毁并且文件将永远不会被删除。那么如何运行某种Service这将等到可以删除文件然后杀死自己。最好的解决方案是什么?

4

1 回答 1

1

发送电子邮件时,必须删除文件。

这不太可能,因为您无法知道文件何时发送。

我使用 startActivityForResult(emailIntent) 启动电子邮件意图并在 onActivityResult() 中捕获响应。

ACTION_SEND不是为与 一起使用而设计的startActivityForResult(),即使是,也不能保证何时onActivityResult()调用电子邮件已实际发送。您无法知道电子邮件是否已发送。例如,电子邮件客户端可能只是将要发送的电子邮件排队,因为没有 Internet 连接,或者电子邮件的设置被设置为批量发送电子邮件,等等。

所以问题是何时/如何删除文件?

等待 24 小时,然后将其删除,并希望邮件在该时间段内发送。

我在想我可以运行一个线程,它将检查文件是否未被任何其他进程使用,然后将其删除。

您正在对其他应用程序的实现做出假设。当您碰巧认为应该打开文件时,不需要第三方电子邮件应用程序必须打开您的文件。

那么如何运行某种服务,它会等到文件可以被删除然后杀死自己。

同样,您无法真正知道何时可以删除文件。24 小时是一个猜测;可以想象,电子邮件可能仍在排队,而其他应用程序可能仍需要附件。但是,基于时间的策略是您可以做出的最不无效的假设,并且它还使用户更容易配置在删除文件之前让文件停留多长时间。

于 2013-11-09T13:31:12.087 回答