通知按钮点击触发函数异常: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
相关产品推荐
相关产品推荐

