AlarmManager 没有在指定时间触发,而是在指定时间后约 5 分钟触发……为什么?如果我在一段时间后激活它,它也会起作用。也就是说,如果设置为10:00,而我在11:00激活它,那么理论上它应该在明天10:00工作,但它每分钟都在工作。它将在明天 ~10:05 工作
void setMorningAlarm(Context context){
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, morningId, intent, 0);
Calendar time = Calendar.getInstance();
time.set(Calendar.HOUR_OF_DAY, 8);
time.set(Calendar.MINUTE, 0);
alarmManager.setInexactRepeating(
AlarmManager.RTC_WAKEUP,
time.getTimeInMillis(),
AlarmManager.INTERVAL_DAY,
pi);
Toast.makeText(context,"Morning Notify", Toast.LENGTH_SHORT).show();
}
为了精确计时,请使用
setRepeating()
而不是setInexactRepeating
.对于今天的即时操作,如果今天的约定时间已经过去的话。事实是,如您的问题所述,例如,在 11.00,您会得到一个逾期的
Alarm
,并立即执行。体制内就是这样。为避免这种情况,请确保响应时间在未来。如果已经是过去,则添加一天。例如,像这样: