每隔几秒收到一次TIMEZONE_CHANGED意图

我使用带有TIMEZONE_CHANGED动作的BroadcastReceiver,通过使用AlarmManager来重置警报,以确保警报在设定的时间正确运行,而不是在几个小时之前或之后,具体取决于时区的变化。

然而,在用户发送的最新日志中,我看到了每隔几秒钟就会收到TIMEZONE_CHANGED动作意图的信息,用户抱怨应用程序出现故障。

这是我的BroadcastReceiver的onReceive代码

@Override public void onReceive(Context context, Intent intent) { Utils.log("OnTimeChange"); String action = intent.getAction(); if (action.equals(Intent.ACTION_TIME_CHANGED)) { Utils.log("TimeChange"); } else if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) { Utils.log("TimeZoneChanged"); } BroadcastsManager.updateBroadcastsFromAlarms(context, AlarmsDbAdapter.getInstance(context)); } 

清单的意图filter:

 <intent-filter> <action android:name="android.intent.action.TIMEZONE_CHANGED" /> <action android:name="android.intent.action.TIME_SET" /> </intent-filter> 

而日志的一部分(就像这样一个多小时 – 日志的完整长度)

 1. 19/4 7:41:54 - posting alarm 3 for 8:15 (in 0h) 2. 19/4 7:44:29 - OnTimeChange 3. 19/4 7:44:29 - TimeZoneChanged 4. 19/4 7:44:29 - posting alarm 3 for 8:15 (in 0h) 5. 19/4 7:44:54 - OnTimeChange 6. 19/4 7:44:54 - TimeChange 7. 19/4 7:44:54 - posting alarm 3 for 8:15 (in 0h) 

这是一个三星Galaxy S III(Android V 4.1.2)。 奇怪的是,我的S III没有发生。 用户是否可以设置在他/她的设备上启用了“通过提供者自动更改时区”选项,并且每隔几秒发送一次这样的信息?

有没有人经历过它? 我想我只是添加一个选项来检查时区是否在更新广播之前是否真的发生了变化,但是它仍然每隔几秒钟就会收到一个接收器。

Solutions Collecting From Web of "每隔几秒收到一次TIMEZONE_CHANGED意图"

我仍然不知道为什么时区更改和时间设置经常被调用,但是我能够find一个解决scheme,让我找出什么时候实际需要反应。

此外,我只听现在的时区更改。

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); String oldTimezone = prefs.getString(PREF_TIMEZONE, null); String newTimezone = TimeZone.getDefault().getID(); long now = System.currentTimeMillis(); if (oldTimezone == null || TimeZone.getTimeZone(oldTimezone).getOffset(now) != TimeZone.getTimeZone(newTimezone).getOffset(now)) { prefs.edit().putString(PREF_TIMEZONE, newTimezone).commit(); Logger.log("TimeZone time change"); //update alarms } 

我增加了区域的时间检查,因为我经常发现,虽然区域改变了,但它们在时间上没有任何差别。 还有一些用户声称,他们甚至没有发现任何地方有很多的变化,只是定期的工作和返回。

检查有限数量的不需要的操作。

避免倾听:

 <action android:name="android.intent.action.TIME_SET" /> <action android:name="android.intent.action.TIMEZONE_CHANGED" /> 

当时间没有设定,时区也没有改变时,他们似乎也定期打电话。 我怀疑它是使用“ 使用networking提供的时区和时间 ”在手机的设置中链接到用户。

如果你真的需要听这些广播,你应该检查时间是否真的发生了显着的变化,或者如果从networking提供的时间只有一毫秒的修正