官方文档展示了如何发送带有附件的电子邮件:
public void composeEmail(String[] addresses, String subject, Uri attachment) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_STREAM, attachment);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
然后说:
如果你想确保你的意图只由电子邮件应用程序处理(而不是其他短信或社交应用程序),那么使用
ACTION_SENDTO
动作并包括"mailto:"
数据方案。
一样:
public void composeEmail(String[] addresses, String subject) {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
但实际上,我想要以上的组合…例如,仅使用电子邮件应用程序发送带有附件和的电子邮件。
但当intent.setData(Uri.parse("mailto:"))
与Intent.ACTION_SEND
或Intent.ACTION_SEND_MULTIPLE
联合使用时,没有发生任何变化。没有电子邮件应用程序(或应用程序选择器)打开。
那么我如何发送带有附件(或多个附件)的电子邮件,同时也限制应用程序的电子邮件应用程序?
没有收件人的mailto:
URI字符串无效;试着这样做:
intent.setData(Uri.parse("mailto:" + String.join(",", addresses)));
参见RFC 6068: 'mailto' URI Scheme。
删除if (intent.resolveActivity(getPackageManager()) != null)
检查,它将打开意图。通常,无论邮件处理应用程序是否存在,操作系统都会返回null。