9

在我的 Android 应用程序中,我可以使用以下命令以编程方式打开默认的电子邮件编辑器,其中包含收件人、主题和消息:

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);

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

有人知道怎么做吗?

4

2 回答 2

2

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

我们如何将 startActivityforResult() 用于电子邮件意图?

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

于 2010-12-14T19:24:59.660 回答
1

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

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

我想说您可能需要自己处理电子邮件的发送,即编写一个连接到 SMTP 并将邮件发送出去的简单函数。我敢肯定有很多图书馆可以处理所有繁重的工作。

(当然,您可以startActivityForResult先尝试一下——也许最常见的电子邮件应用程序确实会给您一个返回值。)

于 2010-12-14T19:19:29.440 回答