这没有任何问题:
Intent mIntent = new Intent(getClass().getPackage().getName() + ".ALARM_TRIGGER");
PendingIntent pi = PendingIntent.getBroadcast(
BackgroundService.getInstance(),
mAlarmID,
mIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), interval, pi);
代码有效。每次我们运行此代码时,它都会使用ID(mAlarmID)更新待处理的意图。
但是,如果手机处于深度睡眠状态,则上述代码不会触发。所以我们必须使用ELAPSED_REALTIME_WAKEUP。
mAlarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + startIn,
interval,
pi
);
检查adb shell dumpsys alarm
后,RTC_WAKEUP始终查找并更新正确的待处理意图。但是,使用带有ELAPSED_REALTIME_WAKEUP的警报管理器,无论相同的ID,始终都会创建新的待处理意图。那是什么意思?
这个错误吗?然后如何使用此代码,以便始终有最多1个警报?