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 回答
这意味着Gmail必须支持MIME类型的
*/*
通配符模式,因为email/text
不是有效的MIME类型 .WhatsApp应用程序的开发人员相信他们可以处理这样一个
Intent
.WhatsApp忽略
EXTRA_EMAIL
的事实是完全合理的 .ACTION_SEND
是请求,而不是命令 .EXTRA_EMAIL
是一个建议,而不是一个命令 . 例如,Gmail无需在其ACTION_SEND
实施中关注EXTRA_EMAIL
. 碰巧这样做,但不要假设所有ACTION_SEND
实现都会关注EXTRA_EMAIL
.这是因为
email
没有MIME类型的结构 .Android中没有“邮件发送意图” .
你的
ACTION_SEND
Intent
缺少任何东西,因为它既没有_718283也没有EXTRA_STREAM
. 因此,许多ACTION_SEND
-capable活动对您的Intent
无效 .The JavaDocs for ACTION_SEND有点难以阅读,但它解释了
ACTION_SEND
Intent
的用途以及如何设置它 . 该文档也有this和this也可能有用 .