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

标签 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" });
...

不幸的是,“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

最佳答案

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

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() 触发此 Intent 时,您现在只会在列表中看到电子邮件应用程序,如果您选择 Gmail,多个附件将在那里。

我使用 try/catch 执行此操作,以防 startActivity 解析为无 Activity ,在这种情况下,我删除了选择器,它似乎运行良好。

关于android - 打开包含多个附件的电子邮件,同时将选择器限制为仅电子邮件应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22240028/

相关文章:

android - 更新到 Android Studio 3.2 时出现 Gradle 错误

email - Outlook Mailcow 错误的 ssl 证书

java - Android Activity 生命周期 : Problems with Onstop()

Android Google Play 意向引荐来源网址

java - 使用 appium 捕获 Android 屏幕截图

java - React Native android 0.19.0 如何添加节点模块依赖项?

Android 在每次测试开始时撤销权限

php 邮件在hotmail 中总是变成垃圾邮件

c# - 如何使用CSS在电子邮件正文中发送网页

android - FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 和 FLAG_ACTIVITY_CLEAR_TOP 的区别是什么 | FLAG_ACTIVITY_SINGLE_TOP?