如需撰写电子邮件,请根据其是否包括附件使用以下其中一项操作,并使用下列 extra 键加入收件人和主题等电子邮件详情。
-
操作
-
ACTION_SENDTO
(适用于不带附件)
ACTION_SEND
(适用于带一个附件)
ACTION_SEND_MULTIPLE
(适用于带多个附件)
数据 URI 架构
- 无 MIME 类型
-
"text/plain"
"*/*"
Extra
-
- 包含所有“主送”收件人电子邮件地址的字符串数组。
- 包含所有“抄送”收件人电子邮件地址的字符串数组。
- 包含所有“密件抄送”收件人电子邮件地址的字符串数组。
- 包含电子邮件主题的字符串。
- 包含电子邮件正文的字符串。
-
指向附件的
Uri
。如果使用的是ACTION_SEND_MULTIPLE
操作,应将其改为包含多个Uri
对象的ArrayList
。
Intent.EXTRA_EMAIL
Intent.EXTRA_CC
Intent.EXTRA_BCC
Intent.EXTRA_SUBJECT
Intent.EXTRA_TEXT
Intent.EXTRA_STREAM
示例 Intent:
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);
}
}
如果您想确保 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 过滤器:
<activity ...>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<data android:type="*/*" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SENDTO" />
<data android:scheme="mailto" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>