如何等待电子邮件意图完成并获得结果?

时间:2010-12-14 19:10:57

标签: android android-intent email-client

在我的Android应用中,我可以使用以下方式以编程方式打开包含To,Subject和Message的默认电子邮件编辑器:

Intent emailIntent=new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, toemail);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
emailIntent.setType("text/plain");
emailIntent.setClassName("com.android.email", "com.android.email.activity.MessageCompose");
startActivity(emailIntent);

这很好用,但我需要在我的应用中等待,直到用户完成电子邮件屏幕并知道电子邮件是发送还是丢弃。

任何人都知道怎么做?

2 个答案:

答案 0 :(得分:2)

通常,可以使用startActivityForResult(),它将第二个活动作为子活动启动。但是,在电子邮件活动的情况下,这似乎不起作用,可能是因为内部实施。在发布问题之前尝试搜索:

how can we use startActivityforResult() for Email intent?

实际发送电子邮件是异步设计,因此活动可能会在实际发送电子邮件之前返回。我没有具体测试这个案例,但是从上面的链接看来,一旦用户点击发送按钮,活动就会返回。如果这对你的用例来说足够了,那么如果你需要知道电子邮件是否真的被发送了,你可能就是SOL。

答案 1 :(得分:1)

这将是棘手的。电子邮件发送没有标准化的返回值,并且根据用户的设置,邮件可以通过电子邮件应用程序,Gmail应用程序或许多第三方电子邮件应用程序之一发送。他们很可能在处理结束电子邮件的方式上有所不同。

至于您的问题,您可以使用startActivityForResult()启动活动,然后在完成后继续,返回值指示事情的进展情况。但是,我很确定大多数电子邮件应用都不会在这里给你一个正确的结果。

我很想说你可能需要自己处理电子邮件的发送,即编写一个连接到SMTP的简单函数并将邮件发送出去。我确信那里有很多库来处理所有繁重的工作。

(当然,您可以首先尝试使用startActivityForResult - 最常见的电子邮件应用可以为您提供返回值。)