在Android中发送电子邮件时,在StartActivity()中使用Intent.createChooser()的目的是什么?

时间:2010-09-27 13:29:13

标签: android android-intent

当我们需要在Android发送电子邮件时,我们将使用Intent.ACTION_SEND调用已注册的电子邮件应用程序,如下所示

Intent i = new Intent(Intent.ACTION_SEND);
startActivity(Intent.createChooser(i, "Send mail..."));

我怀疑为什么我们需要在startActivity中使用Intent.createChooser而不是使用 startActivty(i)。 是否有使用Intent.createChooser()的具体原因?

5 个答案:

答案 0 :(得分:25)

AFAIK,如果您使用Intent.createChooser,则有三个不同之处:

  1. 您可以指定选择器对话框的标题,使其更清晰。

  2. 即使用户选择了默认选项,系统也会始终显示选择器对话框。

  3. 如果Intent.createChooser创建的意图与任何活动都不匹配,系统仍会显示包含指定标题的对话框,并显示错误消息No application can perform this action。或者,对于正常意图,您可能会遇到Android运行时错误:Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent

答案 1 :(得分:10)

选择器使用户可以选择其他邮件应用程序而不是默认邮件应用程序。如果您使用普通的gmail(privat)和电子邮件(与工作相关)并且您想要选择要使用的那个,它非常有用。

应始终使用......

答案 2 :(得分:8)

旧的消息,但对于遇到它的其他人,您可以将Intent上的类型设置为mime类型的电子邮件,这至少会将其限制为可以发送相应类型消息的应用程序:

Intent i = new Intent(Intent.ACTION_SEND); 
i.setType( "message/rfc822");
startActivity(Intent.createChooser(i, "Send mail..."));

使选择器对话框更清晰。

答案 3 :(得分:5)

如果您不使用createChooser(),系统仍将显示选择器对话框,除非用户已经表明他们决定将哪个已安装的程序用于给定任务(或者他们已撤回之前的决定)。

如果您使用createChooser(),系统将始终显示对话框,即使已经有明确的偏好。

所以,两者都是绝对正确的,你必须决定在任何给定的情况下使用哪一个。您的里程可能会有所不同,但基本上,如果您提供文本,图像,视频或类似内容的格式进行显示或编辑,您可能需要省略createChooser(),以便用户已经喜欢的内容可以立即开始。另一方面,如果你想分享一些你期望用户使用不同的已安装程序(例如,发送电子邮件,Facebook,聊天等)来处理的东西,你可能想要使用{{1}使您的用户可以轻松选择。

答案 4 :(得分:1)

我个人使用:

try {
    startActivity(i);
} catch (ActivityNotFoundException e) {
    startActivity(Intent.createChooser(i, null));
}

因此,如果用户有默认值,它将使用默认值,如果没有应用,则会弹出“无应用”窗口。两人都很高兴。