【问题标题】:Android - BroadcastReceiver never called from AlarmManagerAndroid - BroadcastReceiver 从未从 AlarmManager 调用
【发布时间】:2012-03-26 18:52:51
【问题描述】:

我的广播接收器有问题。基本上,我的服务中有一个函数,我想每隔 2 小时调用一次。所以我使用了 AlarmManager 和 Broadcast 接收器来完成它,但是,看起来接收器从未被调用过。我的代码:

在服务的 onCreate 方法中:

Intent intent5 = new Intent("MYINTENT");
sender2 = PendingIntent.getBroadcast(this, 192838, intent5, PendingIntent.FLAG_UPDATE_CURRENT);
am2 = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
am2.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), 1000*60*60*2, sender2);

BroadcastReceiver connectionReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
       check();
    }
  };

  registerReceiver(connectionReceiver, new IntentFilter("MYINTENT"));

然后是 check() 方法

public static void check(){
    //some code
}

我还尝试创建一个扩展 BroadcastReceiver 的类,在 Manifest 等中注册它,它被调用了,但随后我得到了 NullPointerException,从 BroadcastReceiver 中调用服务的 check() 方法。

【问题讨论】:

    标签: android broadcastreceiver alarmmanager


    【解决方案1】:

    我还尝试创建一个扩展 BroadcastReceiver 的类,在 Manifest 等中注册它,它被调用了,但后来我得到了 NullPointerException,从 BroadcastReceiver 中调用服务的 check() 方法。

    回到那个解决方案,然后修复你的NullPointerException。最有可能的是,Android 终止了调用 registerReceiver() 的应用程序的进程(例如,用户按下 HOME 并没有返回该进程)。 check()——不管是什么——必须假设这是一个全新的过程。你的NullPointerException 可能来自check() 认为应该初始化某些东西,而实际上它不是。

    【讨论】:

    • 是的,这确实是一个更好的解决方案。当我终于找到那个异常的原因时,它就像一个魅力。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多