AlarmManager发送的广播,使用静态注册可以成功收到,但是使用动态注册的方式,就收不到,请问是AlarmManager广播不支持动态注册?
Intent intent = new Intent(context, TestReceiver.class);
intent.setAction("test");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
。。。。。。
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, AlarmManager.INTERVAL_DAY, pendingIntent);
请问AlarmManager发送的广播,动态注册能收到吗?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
梦回阑珊 2023-11-30 15:05关注回复不易,麻烦关注下博主,后面还有问题直接私信我,谢谢!!!
AlarmManager发送的广播是支持动态注册的,和静态注册一样,你应该能够通过动态注册的方式接收到AlarmManager发送的广播。
在你提供的代码中,你使用了PendingIntent.getBroadcast创建了一个用于广播的PendingIntent,并使用alarmManager.setRepeating设置了重复的定时任务。这理论上应该能够触发TestReceiver接收到广播。
确保以下几点:
动态注册广播接收器: 确保你的TestReceiver是通过registerReceiver方法在代码中动态注册的。
TestReceiver receiver = new TestReceiver(); IntentFilter filter = new IntentFilter("test"); registerReceiver(receiver, filter);Manifest文件中没有注册重复的接收器: 如果你在AndroidManifest.xml中也注册了TestReceiver,并且在Manifest中的注册中设置了相同的action,可能会导致接收两次广播,而且动态注册可能会被Manifest中的注册覆盖。
如果在Manifest中注册了广播接收器,可以尝试注释掉Manifest中的注册,以确保只有动态注册的接收器。
确保权限和用户权限: 确保你的应用程序在Manifest文件中声明了相应的权限,例如RECEIVE_BOOT_COMPLETED,如果你使用了ELAPSED_REALTIME_WAKEUP,还需要WAKE_LOCK权限。此外,确保你的应用在运行时有接收广播的权限。
检查广播接收器的逻辑: 在TestReceiver中,确保你有正确的逻辑来处理接收到的广播。你可以在onReceive方法中添加Log来检查是否接收到了广播。
public class TestReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("test".equals(intent.getAction())) { Log.d("TestReceiver", "Received broadcast"); // 处理广播逻辑 } } }本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用