什么是Android上发送带有多个附件的电子邮件,而不在选配具有非电子邮件应用程序的最佳方法是什么?
当发送电子邮件,我用来做这样的:
final Intent sendEmailIntent = new Intent(Intent.ACTION_SEND);
sendEmailIntent.setType("message/rfc822");
sendEmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "test@test.com" });
...
不幸的是,“消息/ RFC822”不再很好地用于滤除从选择器不期望的应用程序,如印象笔记,驱动器,以及各种其他应用程序。
最近,我发现这个变通方法,对于单个附件的工作原理:
sendEmailIntent = new Intent(Intent.ACTION_SENDTO);
Uri data = Uri.parse("mailto:?to=test@test.com&subject...");
sendEmailIntent.setData(data);
...
不幸的是,这并不对多个附件的工作。 我试了一下,它崩溃的Gmail。 :S
我终于找到了解决办法,尽管一个,仅适用于冰淇淋三明治MR1以上。 诀窍是使用ACTION_SEND_MULTIPLE先建立自己的意图:
sendEmailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
sendEmailIntent.setType("message/rfc822");
sendEmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "some@email.com" });
sendEmailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
sendEmailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
final ArrayList<Uri> uris = /* ... Your code to build the attachments. */
sendEmailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
要限制它只有电子邮件应用,添加以下代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
sendEmailIntent.setType(null); // If we're using a selector, then clear the type to null. I don't know why this is needed, but it doesn't work without it.
final Intent restrictIntent = new Intent(Intent.ACTION_SENDTO);
Uri data = Uri.parse("mailto:?to=some@email.com");
restrictIntent.setData(data);
sendEmailIntent.setSelector(restrictIntent);
}
当您启动此意图与startActivity(),你现在只能在列表中看到电子邮件应用,如果你选择Gmail中,多个附件将在那里。
我这样做有一个try / catch万一startActivity解析到任何活动,在这种情况下,我删除选择,它似乎运作良好。
文章来源: Opening an email with multiple attachments, while restricting the chooser to ONLY email apps?