2

我有一个问题,我使用 AlarManager 每分钟更新一个小部件(它是一个时钟)以显示当前时间,但是,AlarmManager 永远不会与设备中的系统时钟同步,我使用这个:

alarmManager.setRepeating(AlarmManager.RTC, System.getCurrentTimeInMillis(), 60000, pendingIntent);

它每分钟都有效,但是,问题是,如果我在下午 2:15:30 将小部件放在屏幕上,那么一分钟后,AlarmManager 将再次调用广播,所以下一个更新将在下午 2:16:30 进行,并且不会与系统时间同步,因为当系统时间显示为下午 2:16:00 时,小部件仍会显示为下午 2:15:00。

我希望我足够清楚,我将感谢您的帮助,谢谢。

4

1 回答 1

2

setRepeating 的第二个参数是您希望警报第一次触发的时间。您需要进行算术以将其与下一分钟边界对齐。例如:

 now = system.getCurrentTimeInMillis();
 oneMinuteFromNow = now  + oneMinute;
 nextMinuteRollover = oneMinuteFromNow - (oneMinuteFromNow % oneMinute);

然后使用 nextMinuteRollover 作为 setRepeating 的第二个参数。

(这显然可以简化——我把它写得很详细,这样你就可以看到代码在做什么。)

于 2013-09-03T15:05:54.530 回答