You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Compose启动外部应用触发TransactionTooLargeException错误求助

问题解决:Compose中启动Intent触发TransactionTooLargeException

错误原因

你遇到的java.lang.RuntimeException: android.os.TransactionTooLargeException,是因为Intent的Uri中携带的text参数(即encodedUrl)体积过大(9MB左右),远超Android Binder跨进程传输的默认限制(通常约1MB)。MainActivity中测试正常,大概率是当时使用的encodedUrl内容较小,未达到阈值。

解决方案

不要将大文本通过Uri参数传递,改用WhatsApp支持的ACTION_SEND Intent来传递内容,具体实现如下:

Compose中的代码示例

val context = LocalContext.current
val sendIntent = Intent(Intent.ACTION_SEND).apply {
    // 指定内容类型为纯文本
    type = "text/plain"
    // 设置目标电话号码
    putExtra(Intent.EXTRA_PHONE_NUMBER, phoneNumber)
    // 传入要发送的原始文本内容(无需编码到Uri中)
    putExtra(Intent.EXTRA_TEXT, "替换为你原本要编码的大文本/链接内容")
    // 可选:指定仅打开WhatsApp,若需让用户选择应用可移除该行
    setPackage("com.whatsapp")
}

// 先检查是否有应用能处理该Intent,避免崩溃
if (sendIntent.resolveActivity(context.packageManager) != null) {
    context.startActivity(sendIntent)
}

额外说明

  • 如果encodedUrl是长链接,直接传递原始链接即可,无需额外编码;如果是大段文本,直接传入EXTRA_TEXT字段。
  • 若需要让用户选择其他社交应用发送,可移除setPackage("com.whatsapp"),并用Intent.createChooser包装Intent:
    val chooserIntent = Intent.createChooser(sendIntent, "选择发送应用")
    context.startActivity(chooserIntent)
    

内容的提问来源于stack exchange,提问作者Ahmed Abdelrahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:32:10