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

为何BroadcastReceiver的onReceive中无法启动Intent.ACTION_SEND分享意图?

问题分析与修复方案

问题主要出在这两个地方:

  • 没用到系统分享选择器
    直接启动Intent.ACTION_SEND很容易被系统的后台启动限制拦住,或者在有多个可处理应用时不弹出选择器。必须用Intent.createChooser()把分享Intent包起来,这个方法生成的是系统级的选择器界面,系统允许从后台启动它。

  • Android 12+的后台启动限制
    API 31及以上版本里,BroadcastReceiver这类后台组件直接启动普通Activity会被系统拦截,而用createChooser生成的选择器属于系统允许的例外情况。

修改后的代码如下:

class NotificationReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        val message = intent?.getStringExtra("sharedMessage") ?: return // 内容为空直接终止操作
        
        val shareIntent = Intent(Intent.ACTION_SEND).apply {
            putExtra(Intent.EXTRA_TEXT, message)
            type = "text/plain"
        }
        
        // 用系统选择器包装分享Intent,第二个参数是选择器标题
        val chooserIntent = Intent.createChooser(shareIntent, "分享到")
        chooserIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        
        context?.startActivity(chooserIntent)
    }
}

补充说明:

  • 加了?: return处理message为空的情况,避免做无效操作。
  • 不需要再用resolveActivity判断,createChooser会自动处理没有可用分享应用的情况,给用户显示提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:05:26