使用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
相关产品推荐
相关产品推荐

