【问题标题】:Why use Intent.createChooser()?为什么使用 Intent.createChooser()?
【发布时间】:2012-03-11 09:10:01
【问题描述】:

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

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

我改成:

startActivity(emailIntent);

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

【问题讨论】:

    标签: android email android-intent


    【解决方案1】:

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

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

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

    另外,如果你使用语句

    startActivity(emailIntent);
    

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

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

    并且没有安装邮件客户端,那么App会显示错误信息“No Application can perform this action”。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2019-05-30
          • 1970-01-01
          • 2021-02-23
          • 2011-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多