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应用程序时,它会根据需要以"foo@gmail.com"
的形式填充“收件人”(收件人)。
我的问题是,当WhatsApp 不能处理此类意图时,为什么此选择器还会显示“ WhatsApp”。即使我选择WhatsApp并尝试发送消息,它也不会执行任何操作(因为WhatsApp无法像电子邮件应用程序那样处理填充“收件人”的意图)。该应用程序不会崩溃。
现在,我了解到WhatsApp可能正在听取此意图,因为类型包括“文本”,但是如果我尝试使用:
intent.setType("email");
选择器对话框显示“没有应用程序执行此功能”。
现在,这是WhatsApp开发人员的错吗?还是我使用错误的发送意图(然后应该如何使用)?
我希望我已经说清楚了,请问其他需要知道的事情。
谢谢!
答案 0 :(得分:1)
在此选择器对话框中,我得到了类似“ GMail”的选项,并且运行正常。
这意味着Gmail必须支持MIME类型的*/*
通配符模式,因为email/text
不是有效的MIME类型。
我的问题是,当WhatsApp无法处理此类意图时,为什么此选择器还会显示“ WhatsApp”
WhatsApp应用程序的开发人员认为他们可以处理这样的Intent
。
即使我选择WhatsApp并尝试发送消息,它也不会执行任何操作(因为WhatsApp无法像电子邮件应用程序那样处理填充“收件人”的意图)。
WhatsApp忽略EXTRA_EMAIL
的事实是完全合理的。 ACTION_SEND
是一个请求,而不是命令。 EXTRA_EMAIL
是建议,而不是命令。例如,在Gmail的EXTRA_EMAIL
实施中,无需任何注意ACTION_SEND
。碰巧是这样做的,但是并不能假设所有ACTION_SEND
的实现都会关注EXTRA_EMAIL
。
如果我尝试使用
intent.setType("email");
,则选择器对话框显示“没有应用程序执行此功能”。
这是因为email
不具有MIME类型的结构。
还是我使用错误的发送意图(然后应该如何使用)?
Android中没有“邮件发送意图”。
您的ACTION_SEND
Intent
没有要发送的任何内容,因为它既没有EXTRA_TEXT
也没有EXTRA_STREAM
。结果,有ACTION_SEND
个活动的很多对您的Intent
没有任何帮助。
The JavaDocs for ACTION_SEND
有点难以理解,但是它解释了ACTION_SEND
Intent
的用途以及设置方法。该文档中还有this,this也可能有用。