我一直在开发一个应用程序,它应该每天在规定的时间运行,但周末除外。我使用了一个AlarmBroadCastReceiver
来在指定的时间触发某个代码块。我将这段代码放在我的AlarmBroadCastReceiver
类中:
public void SetAlarm(Context context) {
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
intent.putExtra(ONE_TIME, Boolean.FALSE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 0, pi);
}
基本上,我会在那个时间设置一个重复的闹钟。
然后,在按下某个按钮时,我将从MainActivity中调用以下代码:
public void onStartAlarmClicked(View view){
Context context = this.getApplicationContext();
if(alarm != null){
Log.e(TAG, "starting alarm");
alarm.SetAlarm(context);
}else{
Log.e(TAG, "Alarm is null");
}
}
这里的alarm
是AlarmBroadCastReceiver
类的一个对象。
我的问题是代码只会触发一次。当时间到达2:30时,它会触发。然而,当我把时间调回到2:29并等待2:30,或者将日期向前调整一天,然后将时间设置为2:20并等待2:30时,代码就不再触发了。
我感觉我可能忽略了设置闹钟时间的一些简单事情,但我现在看不到它。