当我们需要在Android发送电子邮件时,我们将使用Intent.ACTION_SEND调用已注册的电子邮件应用程序,如下所示
Intent i = new Intent(Intent.ACTION_SEND);
startActivity(Intent.createChooser(i, "Send mail..."));
我怀疑为什么我们需要在startActivity中使用Intent.createChooser而不是使用
startActivty(i)
。
是否有使用Intent.createChooser()
的具体原因?
答案 0 :(得分:25)
AFAIK,如果您使用Intent.createChooser
,则有三个不同之处:
您可以指定选择器对话框的标题,使其更清晰。
即使用户选择了默认选项,系统也会始终显示选择器对话框。
如果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));
}
因此,如果用户有默认值,它将使用默认值,如果没有应用,则会弹出“无应用”窗口。两人都很高兴。