我有一个问题,我使用AlarManager每分钟更新一个Widget(它是一个时钟)来显示当前时间,但是,AlarmManager永远不会与设备中的系统时钟同步,我使用:
alarmManager.setRepeating(AlarmManager.RTC, System.getCurrentTimeInMillis(), 60000, pendingIntent);
它每分钟都有效,但问题在于,如果我在下午2:15:30将小部件放在屏幕上,那么一分钟之后它就是AlarmManager再次呼叫广播的时间,因此,下一次更新将在下午2:16:30进行,并且不会与系统时间同步,因为当系统时间显示在下午2:16:00时,小部件仍将显示在下午2:15:00。
我希望我很清楚,感谢你的帮助,谢谢你。
答案 0 :(得分:2)
setRepeating的第二个参数是您希望第一次触发警报的时间。您需要执行算术以将其与下一分钟边界对齐。例如:
now = system.getCurrentTimeInMillis();
oneMinuteFromNow = now + oneMinute;
nextMinuteRollover = oneMinuteFromNow - (oneMinuteFromNow % oneMinute);
然后使用nextMinuteRollover作为setRepeating的第二个参数。
(这显然可以简化 - 我把它弄得很冗,所以你可以看到代码在做什么。)