首页 文章

当WhatsApp不是邮件应用程序时,为什么Intent.EXTRA_EMAIL会在选择器对话框中选择WhatsApp?

提问于
浏览
0
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("email/text");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]"foo@gmail.com"});
startActivity(Intent.createChooser(intent,"Send Mail"));

在这个选择器对话框中,我得到像'GMail'这样的选项,它工作得很好 . 当我选择Gmail应用程序时,它会根据需要将"To"(收件人)填充为 "foo@gmail.com" .

我的问题是为什么当WhatsApp CANNOT 处理这样的意图时,这个选择器也会显示'WhatsApp' . 即使我选择WhatsApp并尝试发送消息,它也什么都不做(因为WhatsApp无法像电子邮件应用那样处理填充"To"的意图) . 该应用程序不会崩溃 .

现在我明白WhatsApp可能正在听这个意图因为类型包含'text',但如果我尝试使用:

intent.setType("email");

选择器对话框显示“没有应用程序来执行此功能” .

现在,这是WhatsApp开发人员的错吗?或者我是以错误的方式使用邮件发送意图(我应该如何使用它)?

我希望我已经说清楚了,请提出其他需要知道的事情 .

谢谢!

1 回答

  • 1

    在这个选择器对话框中,我得到了像'GMail'这样的选项,它运行得非常好 .

    这意味着Gmail必须支持MIME类型的 */* 通配符模式,因为 email/text 不是有效的MIME类型 .

    我的问题是,当WhatsApp无法处理此类意图时,此选择器还会显示“WhatsApp”

    WhatsApp应用程序的开发人员相信他们可以处理这样一个 Intent .

    即使我选择WhatsApp并尝试发送消息,它也什么都不做(因为WhatsApp无法处理填写“To”的意图,就像电子邮件应用程序一样) .

    WhatsApp忽略 EXTRA_EMAIL 的事实是完全合理的 . ACTION_SEND 是请求,而不是命令 . EXTRA_EMAIL 是一个建议,而不是一个命令 . 例如,Gmail无需在其 ACTION_SEND 实施中关注 EXTRA_EMAIL . 碰巧这样做,但不要假设所有 ACTION_SEND 实现都会关注 EXTRA_EMAIL .

    如果我尝试使用intent.setType(“email”);选择器对话框显示“没有应用程序来执行此功能” .

    这是因为 email 没有MIME类型的结构 .

    或者我是以错误的方式使用邮件发送意图(我应该如何使用它)?

    Android中没有“邮件发送意图” .

    你的 ACTION_SEND Intent 缺少任何东西,因为它既没有_718283也没有 EXTRA_STREAM . 因此,许多 ACTION_SEND -capable活动对您的 Intent 无效 .

    The JavaDocs for ACTION_SEND有点难以阅读,但它解释了 ACTION_SEND Intent 的用途以及如何设置它 . 该文档也有thisthis也可能有用 .

相关问题