尝试通过电子邮件发送多个附件时出现 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 邮件时出现问题