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

Posted

技术标签:

【中文标题】打开包含多个附件的电子邮件,同时将选择器限制为仅电子邮件应用程序?【英文标题】:Opening an email with multiple attachments, while restricting the chooser to ONLY email apps? 【发布时间】:2014-04-10 00:09:11 【问题描述】:

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 崩溃。 :S

【问题讨论】:

【参考方案1】:

我终于找到了一个解决方案,尽管它只适用于 Ice Cream Sandwich MR1 及更高版本。诀窍是首先使用 ACTION_SEND_MULTIPLE 构建您的意图:

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

要将其仅限于电子邮件应用,请添加以下代码:

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

当您使用 startActivity() 触发此意图时,您现在只会在列表中看到电子邮件应用程序,如果您选择 Gmail,则会出现多个附件。

如果 startActivity 解析为没有活动,我会使用 try/catch 执行此操作,在这种情况下,我删除选择器,它似乎运行良好。

【讨论】:

以上是关于打开包含多个附件的电子邮件,同时将选择器限制为仅电子邮件应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

Gmail API 将访问权限限制为仅一个组

如何解除 outlook 2016 附件大小的限制

求如何突破论坛积分限制下载附件?

有没有办法将 Gmail 手表限制为仅添加的邮件?

ePub 是不是将 HTML 限制为仅某个子集?

如何将选择限制为仅具有共同值的行?