为什么要使用Intent.createChooser()?

时间:2012-03-11 09:10:02

标签: android email android-intent

我发现了一些发送电子邮件的代码;它看起来像这样:

startActivity(Intent.createChooser(emailIntent, "Email"));

我把它改为:

startActivity(emailIntent);

结果在我的设备上显示相同。为什么要使用Intent.createChooser()

3 个答案:

答案 0 :(得分:3)

你基本上要求系统在第二个语句中找到可以响应Intent“android.content.Intent.ACTION_SEND”并且语句中设置类型的Activity

emailIntent.setType("message/rfc822"); // or "text/plain"

但是在第一个语句中,无论是否有零个/一个/或多个活动来处理意图,您都会请求显示Android应用程序选择器。

另外,如果您使用语句

startActivity(emailIntent);

并且没有电子邮件客户端可以响应您的意图(例如在模拟器中)然后使用抛出“ActivityNotFoundException”的应用程序,但是如果您使用:

startActivity(Intent.createChooser(emailIntent, "Email"));

并且未安装任何电子邮件客户端,然后应用程序将显示错误消息“没有应用程序可以执行此操作”。

答案 1 :(得分:1)

当手机上安装了多个邮件客户端时,它很有用。如果您使用intent.createChooser(...)

,用户可以选择使用哪一个

答案 2 :(得分:1)

使用选择器强制用户在他们已安装的满足意图的应用程序之间做出选择,无论他们是否将其中一个设置为默认值。如果用户尚未设置默认处理程序,则无论您是否调用createChooser,它们都将获得选择器。我看到调用选择器的唯一好处是你可以在选择对话框中输入一个名称而不是默认的“使用完整操作”消息。

恕我直言,我认为如果用户想要选择使用哪个应用程序,他们将不会检查默认情况下选择对话框上的“始终”按钮,因此几乎总是应该避免使用createChooser调用。