这没有任何问题:
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 中,每次代码运行时,您总是会在 dumpsys 警报中找到一个警报。
- 在 #2 中,每次代码运行时,您都会在 dumpsys 警报中找到 ONE MORE 警报。
这是错误吗?那么如何使用此代码,以便您始终拥有最多 1 个警报?