【发布时间】:2015-02-10 02:36:14
【问题描述】:
我需要发送包含多个文件的电子邮件(仅使用电子邮件客户端)。我怎样才能做到这一点? 当我尝试使用 ACTION_SEND_MULTIPLE 时,我无法仅获取电子邮件客户端,但是当我使用 ACTION_SENDTO 时,我无法附加文件。我的代码
Log.d(TAG, "Selected documents count = " + documents.size());
if (documents.size() == 0) {
Toast.makeText(this, "Nothing selected", Toast.LENGTH_LONG).show();
return;
}
Intent sendMailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
sendMailIntent.setType("message/rfc822");
ArrayList<Uri> uris = new ArrayList<Uri>();
for (Document document : documents) {
Log.d(TAG, "FilePath = " + document.getLocalPdfFile());
uris.add(Uri.parse("file://" + document.getLocalPdfFile()));
}
sendMailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(sendMailIntent);
此代码工作正常。它发送文件。问题是如何只向用户显示电子邮件客户端,因为许多其他程序可以处理 ACTION_SEND_MULTIPLE 操作。
【问题讨论】:
-
“我需要发送包含多个文件的电子邮件(仅使用电子邮件客户端)”——不,您需要让用户做用户想做的事情。如果用户想发送电子邮件,很好。如果用户想使用其他选项来处理这些文件,那很好。它是用户的设备,用户的文件,用户的应用,用户的电池寿命,用户的带宽等。请允许用户以用户想要的方式使用他们的设备。
-
EXTRA_STREAM需要字符串或 Uri,而不是 Uris 的数组列表或其他任何内容。 -
将您的按钮重命名为“发送”,或使用
ShareActionProvider。然后,使用ACTION_SEND_MULTIPLE。您可以立即使您的应用更有用并避免“这个问题”。 -
对不起,我只是使用 ACTION_SEND_MULTIPLE(复制了错误的代码)。我的问题是如何仅向用户显示电子邮件客户端,因为此操作不仅可以由电子邮件客户端处理。这意味着用户将在选择器列表中看到许多其他程序。