Android只使用电子邮件应用程序发送带有附件的电子邮件



官方文档展示了如何发送带有附件的电子邮件:

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_SENDIntent.ACTION_SEND_MULTIPLE联合使用时,没有发生任何变化。没有电子邮件应用程序(或应用程序选择器)打开。

那么我如何发送带有附件(或多个附件)的电子邮件,同时也限制应用程序的电子邮件应用程序?

没有收件人的mailto:URI字符串无效;试着这样做:

intent.setData(Uri.parse("mailto:" + String.join(",", addresses)));

参见RFC 6068: 'mailto' URI Scheme。

删除if (intent.resolveActivity(getPackageManager()) != null)检查,它将打开意图。通常,无论邮件处理应用程序是否存在,操作系统都会返回null。

最新更新