问题描述
我正在设计一个闹钟应用程序,我需要收听两个系统广播:Intent.ACTION_TIME_CHANGED
和Intent.ACTION_DATE_CHANGED
。
我相信当用户手动更改时间时会触发ACTION_TIME_CHANGED
。但是ACTION_DATE_CHANGED
何时播出?
此操作的文档不太令人信服。它说,
日期已更改。
谁更改了日期?用户是否通过更改日期设置?还是时钟倒计时到第二天?
我为此找到了两个堆栈溢出答案:
两个答案表明行为完全不同。如果答案1是正确的,我将使用上下文注册的接收器收听此广播。如果答案2是正确的,我需要为Intent.ACTION_TIME_TICK
注册一个上下文注册的接收者,然后手动检查我们是在第二天还是同一天。
解决方法
根据@Nicolas的建议,我测试了两个广播。结果:
-
ACTION_TIME_CHANGED
仅在用户手动更改日期,时间或时间格式(从12小时制到24小时制,反之亦然)时广播。 -
ACTION_DATE_CHANGED
仅在日期更改时(即我们从晚上11:59 PM到第二天12:00 AM)广播。这是由系统自动触发的。