Android:在BroadcastReceiver内发送广播无响应问题咨询
问题解答
Android完全允许从一个BroadcastReceiver内部发送广播触发另一个BroadcastReceiver,不存在场景限制,你的问题是代码和Manifest里的细节错误导致的,具体排查和修复点如下:
XML语法错误导致接收器未注册
你提供的Manifest代码中两个<receiver>标签都存在语法错误:.CalendarProviderBroadcastReceiver的android:exported="true"行末尾缺少闭合的>.AlarmReceiver的android:exported="false"行末尾同样缺少闭合的>
这种错误会导致Android系统无法正确解析Manifest,AlarmReceiver根本没被系统注册,自然不会触发onReceive方法。修正后的代码示例:
<receiver android:name=".CalendarProviderBroadcastReceiver" android:exported="true"> <intent-filter> <action android:name="com.example.SOMETHING.TEST" /> </intent-filter> </receiver> <receiver android:name=".AlarmReceiver" android:exported="false"> <intent-filter> <action android:name="com.example.SOMETHING.REMIND_ME" /> </intent-filter> </receiver>Action字符串拼写不匹配
Manifest里AlarmReceiver的action写的是com.exmaple.SOMETHING.REMIND_ME,其中exmaple是拼写错误(正确应为example)。虽然你用setClass指定组件属于显式广播,不依赖action匹配,但如果后续改用隐式广播,或者AlarmReceiver的onReceive里有判断action的逻辑,都会出现问题,建议统一修正拼写。显式广播的验证建议
你当前用intent.setClass(context, AlarmReceiver.class)发送的是显式广播,只要类名正确、接收器已注册就会触发。可以在AlarmReceiver的onReceive方法开头添加日志输出,或者在发送广播后打印日志,确认广播是否正常发出、接收器是否被调用。
内容的提问来源于stack exchange,提问作者mohammad fakhraee
相关产品推荐
相关产品推荐

