我正在开发一个小应用,您可以在其中发送带有文件附件的电子邮件。发送电子邮件时,必须删除该文件。我使用startActivityForResult(emailIntent)
启动电子邮件意图并在onActivityResult()
中捕获回复。问题是在我按下电子邮件客户端中的发送按钮后立即调用onActionResult(),而不是在实际发送电子邮件时。我还读到ACTION_SEND
不是startActivityForResult()
的{{1}}。那么问题是何时/如何删除文件?我以为我可以运行Thread
,它将检查该文件是否未被任何其他进程使用,然后删除它。问题可能是当应用程序被销毁,线程被销毁并且文件永远不会被删除时。那么运行某种Service
会等到文件被删除然后自杀。
什么是最好的解决方案?
答案 0 :(得分:1)
发送电子邮件时,必须删除该文件。
这是不可能的,因为你无法知道何时发送文件。
我使用startActivityForResult(emailIntent)启动电子邮件意图并捕获onActivityResult()中的响应。
ACTION_SEND
并非设计用于startActivityForResult()
,即使是{1}},也无法保证在调用onActivityResult()
时实际发送了电子邮件。您无法知道电子邮件是否已发送。例如,电子邮件客户端可能只是将要发送的电子邮件排队,因为没有Internet连接,或者设置了电子邮件的设置,以便它可以批量发送电子邮件等等。
所以问题是何时/如何删除文件?
等待24小时,然后将其删除,并希望在该段时间内发送电子邮件。
我在想我可以运行一个Thread,它将检查该文件是否未被任何其他进程使用,然后删除它。
您正在假设其他应用的实现。当您认为应该打开文件时,不要求第三方电子邮件应用程序必须打开您的文件。
那么如何运行某种服务,等待文件被删除然后自杀。
同样,您无法真正知道何时可以删除该文件。 24小时是一个猜测;可以想象,电子邮件可能仍在排队,其他应用程序可能仍需要附件。但是,基于时间的策略是您可以做出的最无效的假设,并且它还使用户可以更容易地配置在删除文件之前让文件延迟多长时间。