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

通知按钮点击触发函数异常:PendingIntent无法关联BroadcastReceiver

问题分析与解决方案

看起来你已经把通知的基础逻辑搭起来了,点击按钮能打开应用,但触发不了BroadcastReceiver的日志,核心问题是BroadcastReceiver的Manifest注册路径错误,还有几个细节需要调整,下面是具体的修复步骤:

1. 修正Manifest中Receiver的类路径

你的ActionReceiver位于com.notifications包下,但当前Manifest里写的是.ActionReceiver——这个写法会让系统在应用的默认包(从你的MainActivity路径看是com.uzskaite)下查找Receiver类,自然找不到。需要把receiver的name改成全类名:

<receiver android:name="com.notifications.ActionReceiver">
    <intent-filter>
        <action android:name="my.action.data" />
    </intent-filter>
</receiver>

2. 完善Intent的Extra参数(规范写法)

你代码里的intents.putExtra("otp");是不完整的,putExtra需要同时指定键和对应的值,否则传递的数据无效,改成这样:

// 替换成你实际需要传递的OTP值
intents.putExtra("otp", "123456");

3. 适配Android 12+的PendingIntent Flags

从Android 12(API 31)开始,创建PendingIntent必须指定FLAG_IMMUTABLE或FLAG_MUTABLE,否则会抛出运行时异常。如果你的Intent不需要后续动态修改,推荐使用FLAG_IMMUTABLE:

// 替换原来的PendingIntent创建代码
PendingIntent snoozePendingIntent = PendingIntent.getBroadcast(
    this.reactContext,
    0,
    intents,
    PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE
);

4. 移除不必要的提前广播(可选)

你当前代码里先调用了sendBroadcast(intents);,这会在显示通知的同时立刻触发一次BroadcastReceiver,容易混淆测试结果。如果只是想测试按钮点击的触发逻辑,可以暂时注释掉这行代码。

验证效果

修改完以上内容后,重新编译运行应用,点击通知上的"Yes"按钮,就能在Logcat里看到NotificationService的日志输出了。

内容的提问来源于stack exchange,提问作者Artūrs Cigelmans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:42:39