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

BroadcastReceiver接收不到消息?服务与MainActivity通信问题求助

排查LocalBroadcastReceiver接收不到消息的问题

你的代码核心问题是注册Receiver时没有设置匹配的IntentFilter,导致发送的广播无法被正确拦截,以下是具体修复步骤:

1. 补全IntentFilter的Action匹配

发送广播时你给Intent设置了action = Intent.ACTION_SEND,但注册Receiver时传入的是空IntentFilter(),这会导致Receiver无法识别对应Action的广播。修改注册代码:

// 在MainActivity的onCreate方法中
val intentFilter = IntentFilter(Intent.ACTION_SEND)
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, intentFilter)

2. 建议使用自定义Action(更安全)

Intent.ACTION_SEND是系统通用Action,容易和其他广播冲突,建议定义自己的专属Action:

// 全局常量定义(可放在单独的Constants类中)
const val ACTION_WATCH_COMMAND = "com.yourapp.package.ACTION_WATCH_COMMAND"

// 发送端(WatchService)修改
override fun onMessageReceived(messageEvent: MessageEvent) {
    if (messageEvent.path == "/command") {
        val message = String(messageEvent.data)
        val messageIntent = Intent(ACTION_WATCH_COMMAND)
        messageIntent.putExtra("message", message)
        LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent)
    } else {
        super.onMessageReceived(messageEvent)
    }
}

// 接收端(MainActivity)注册修改
val intentFilter = IntentFilter(ACTION_WATCH_COMMAND)
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, intentFilter)

3. 别忘了注销Receiver

在MainActivity的onDestroy方法中注销Receiver,避免内存泄漏:

override fun onDestroy() {
    super.onDestroy()
    LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:20:31