Android:Intent.ACTION_TIME_CHANGED还有其他信息吗?

时间:2011-10-13 15:23:40

标签: android broadcastreceiver android-intent

是否有来自Intent.ACTION_TIME_CHANGED的其他信息? getData()或getExtras()中没有任何内容。

我想知道:

  • 手机在设定新时间之前的时间;

  • 谁更改了时间:用户(手动)还是电话运营商?

欢迎任何其他方式获取这些信息!

3 个答案:

答案 0 :(得分:2)

我查看了Android的源代码,这个广播没有任何额外内容。所以,没有办法学习这些信息。

答案 1 :(得分:0)

如果前一次的准确性不那么重要,你可以做一件事。您可以通过以下方式准确地获得前一次+/- 1分钟的时间..

注册广播行动ACTION_TIME_TICK(每分钟播放一次)。

当时间滴答时,如果当前时间与最后一次滴答时间之间的差异超过1分钟,则可以推断出发生了时间变化。之后,您只需将新时间更新为共享首选项。多数民众赞成。

  1. 注册ACTION_TIME_TICK广播。
  2. 收到广播时: 2.1如果是第一次广播,请输入共享首选项的当前系统时间。 2.2否则将当前时间与先前输入的时间进行比较,如果发生差异超过1分钟,则表示时间已经改变。然后将新系统时间更新为SP。
  3. 快乐的编码。

答案 2 :(得分:0)

我不认为知道为什么可以更改时间,尽管自SystemClock.elapsedRealtime()以来,应该通过将System.currentTimeMillis()与SystemClock.elapsedRealtime()进行比较来找出更改时间的数量,在这种情况下无法调整。

例如:

private long realtimeOffset = System.currentTimeMillis() - SystemClock.elapsedRealtime();
private void onReceive(Context context, Intent intent) {
    if(Intent.ACTION_TIME_CHANGED.equals(intent.getAction()) {
        long prevRealtimeOffset = realtimeOffset;
        realtimeOffset = System.currentTimeMillis() - SystemClock.elapsedRealtime();
        Log.i(TAG, "Clock was adjusted by: " + (realtimeOffset - prevRealtimeOffset) + " ms");
    }
}