尝试通过电子邮件发送多个附件时出现 ActivityNotFoundException

Posted

技术标签:

【中文标题】尝试通过电子邮件发送多个附件时出现 ActivityNotFoundException【英文标题】:ActivityNotFoundException when trying to send multiple attachments via emails 【发布时间】:2021-08-04 11:07:27 【问题描述】:

我在尝试通过电子邮件发送多个附件时收到此错误:

android.content.ActivityNotFoundException: No Activity found to handle Intent  act=android.intent.action.SEND_MULTIPLE (has extras) 

我的手机中安装了 Gmail 和 Outlook。(搭载 Android 11 的三星设备)。发送单个附件时,我没有遇到任何问题。我正在使用以下意图通过电子邮件共享多个附件

fun getIntent(
    emailId: Array<String>,
    subject: String,
    body: String,
    attachmentUri: ArrayList<Uri?>
): Intent? 
        val text = ArrayList<String>()
        text.add(body)
      
        return Intent(Intent.ACTION_SEND_MULTIPLE).apply 
            putExtra(Intent.EXTRA_EMAIL, emailId)
            putExtra(Intent.EXTRA_SUBJECT, subject)
            putExtra(
                Intent.EXTRA_TEXT,
                text
            )
            putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachmentUri)
        

上面的方法就是这样调用的

        val history: ArrayList<Uri?> = getHistory()
        val intent = Utils.getIntent(
            arrayOf(getString(R.string.email_id)),
            subject,
            getString(R.string.body),
            history
        )
        intent?.let 
            try 
                startActivity(it)
             catch (e: Exception) 
                
            
        

字符串资源:

    <string name="body">\u2022 Information:\n\u0020\u0020\u25E6Name: %s\n\u0020\u0020\u25E6Age: %s\n\u0020\u0020\u25E6%s\n</string>

我做错了什么?

【问题讨论】:

在你使用这个方法的地方分享代码。 只需使用 ACTION_SEND。 【参考方案1】:

根据the documentation on ACTION_SEND_MULTIPLE,您需要在Intent 上指定内容的MIME 类型,而您没有这样做。

输入:getType() 是正在发送的数据的 MIME 类型。 get*ArrayListExtra 可以有一个 EXTRA_TEXT 或 EXTRA_STREAM 字段,包含要发送的数据。如果使用 EXTRA_TEXT,您还可以选择为客户端提供 EXTRA_html_TEXT 以检索具有 HTML 格式的文本。

支持多种类型,接收者应尽可能处理混合类型。接收者检查它们的正确方法是在每个 URI 上使用内容解析器。意图发送者应该尝试将最具体的 mime 类型放入意图类型中,但它可以根据需要回退到 /* 或 /

例如如果你发送的是image/jpg和image/jpg,intent的类型可以是image/jpg,但是如果你发送的是image/jpg和image/png,那么intent的类型应该是image/*。

但是,除此之外,对于您请求的 MIME 类型,用户完全有可能没有支持 ACTION_SEND_MULTIPLE 的应用。确保在 catch 块中为 try 周围的 startActivity() 调用做一些有用的事情。

【讨论】:

以上是关于尝试通过电子邮件发送多个附件时出现 ActivityNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

Python Post 请求 - 通过 Outlook API 发送文件时出现 415 错误

使用 MAPI 和 Outlook 发送 HTML 邮件时出现问题

使用Gmail API时出现BrokenPipeError

尝试通过 Office 365 发送电子邮件时出现 SMTP 5.7.57 错误

php : 电子邮件发送失败,附件不止一个

我可以通过自动电子邮件从 Google 表单/Google 表格发送多个上传的附件吗?