Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 打开包含多个附件的电子邮件,同时将选择器仅限于电子邮件应用程序?_Android_Email_Android Intent - Fatal编程技术网

Android 打开包含多个附件的电子邮件,同时将选择器仅限于电子邮件应用程序?

Android 打开包含多个附件的电子邮件,同时将选择器仅限于电子邮件应用程序?,android,email,android-intent,Android,Email,Android Intent,在Android上,在选择器中没有非电子邮件应用程序的情况下,发送包含多个附件的电子邮件的最佳方式是什么 发送电子邮件时,我通常这样做: final Intent sendEmailIntent = new Intent(Intent.ACTION_SEND); sendEmailIntent.setType("message/rfc822"); sendEmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "test@test.com"

在Android上,在选择器中没有非电子邮件应用程序的情况下,发送包含多个附件的电子邮件的最佳方式是什么

发送电子邮件时,我通常这样做:

final Intent sendEmailIntent = new Intent(Intent.ACTION_SEND);
sendEmailIntent.setType("message/rfc822");
sendEmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "test@test.com" });
...
不幸的是,“message/rfc822”不再适用于从选择器中过滤出不需要的应用程序,例如Evernote、Drive和各种其他应用程序

我最近发现此解决方案适用于单个附件:

sendEmailIntent = new Intent(Intent.ACTION_SENDTO);
Uri data = Uri.parse("mailto:?to=test@test.com&subject...");
sendEmailIntent.setData(data);  
...

不幸的是,这不适用于多个附件。我试过了,结果Gmail崩溃了我终于找到了一个解决方案,尽管它只适用于冰淇淋三明治MR1及以上。诀窍是首先使用“动作”\u“发送”\u“多次”来构建您的意图:

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);
当您使用startActivity()启动此意图时,您现在只会在列表中看到电子邮件应用程序,如果您选择Gmail,则多个附件将出现在列表中

我使用try/catch来实现这一点,以防startActivity解析为没有活动,在这种情况下,我删除了选择器,它似乎工作得很好

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);
}