onunix 2023-11-30 14:22 采纳率: 77.8%
浏览 12
已结题

请问AlarmManager发送的广播,动态注册能收到吗?

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);

  • 写回答

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");
                // 处理广播逻辑
            }
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月8日
  • 已采纳回答 1月31日
  • 创建了问题 11月30日