android - 如何将AlarmManager与系统时间同步?

标签 android widget alarmmanager broadcast

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

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

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

希望我说得足够清楚,非常感谢您的帮助,谢谢。

最佳答案

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

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

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

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

关于android - 如何将AlarmManager与系统时间同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18595462/

相关文章:

java - 是否有必要从 json 对象中检索所有值?

android - 退出应用程序后保存变量?

android - 我无法在 Android 中取消 Alarms/PendingIntents

android - 每隔几秒接收一次 TIMEZONE_CHANGED Intent

android - 如何在 Android 中模拟 Kotlin 的 kotlinx.android.synthetic View

android - 无法生成签名的 apk? [发生重复平台类错误]

qt - 如何从 Qt 中的堆叠小部件中删除小部件

javascript - 小部件在 td 中心对齐 div 的 Css 样式错误

android widget 提示解锁

android - 为什么只有第二个警报正在执行?