Android何时广播ACTION_DATE_CHANGED?

问题描述

我正在设计一个闹钟应用程序,我需要收听两个系统广播:Intent.ACTION_TIME_CHANGEDIntent.ACTION_DATE_CHANGED

我相信当用户手动更改时间时会触发ACTION_TIME_CHANGED。但是ACTION_DATE_CHANGED何时播出?

此操作的文档不太令人信服。它说,

日期已更改。

谁更改了日期?用户是否通过更改日期设置?还是时钟倒计时到第二天?

我为此找到了两个堆栈溢出答案:

  • Answer 1:当时钟倒计时到第二天时,就会触发广播。
  • Answer 2:当用户手动更改日期时会触发广播,并且不会由系统自动触发。

两个答案表明行为完全不同。如果答案1是正确的,我将使用上下文注册的接收器收听此广播。如果答案2是正确的,我需要为Intent.ACTION_TIME_TICK注册一个上下文注册的接收者,然后手动检查我们是在第二天还是同一天。

解决方法

根据@Nicolas的建议,我测试了两个广播。结果:

  • ACTION_TIME_CHANGED仅在用户手动更改日期,时间或时间格式(从12小时制到24小时制,反之亦然)时广播。

  • ACTION_DATE_CHANGED仅在日期更改时(即我们从晚上11:59 PM到第二天12:00 AM)广播。这是由系统自动触发的。