Android - BroadcastReceiver从未从AlarmManager调用过

时间:2012-03-26 08:29:51

标签: android broadcastreceiver alarmmanager

我的BroadcastReceiver出了问题。基本上,我在我的服务中有一个功能,我想打电话给每个人,比方说,2个小时。所以我使用了AlarmManager和Broadcast接收器来做这件事,但是看起来接收器从未被调用过。我的代码:

在service的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()方法。

1 个答案:

答案 0 :(得分:0)

  

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

返回该解决方案,然后修复NullPointerException。最有可能的是,Android终止了您的应用程序调用{​​{1}}的过程(例如,用户按下了HOME并且没有返回到该过程)。 registerReceiver() - 不管是什么 - 必须假设这是一个全新的过程。您的check()可能来自NullPointerException,认为应该初始化某些内容,而不是。