2019 年 4 月 6 日之后从 Location.getTime 返回的日期错误(周数翻转)
Posted
技术标签:
【中文标题】2019 年 4 月 6 日之后从 Location.getTime 返回的日期错误(周数翻转)【英文标题】:Wrong date returned from Location.getTime after 6 April 2019 (week number rollover) 【发布时间】:2019-10-02 11:53:18 【问题描述】:我有一部手机三星 N7100 (kitkat 4.4.2)。 2019 年 4 月 6 日之后,我开始获取日期为 1999 年的位置。
有时位置的日期是 2019 年,但在那之后设备将停止接收任何位置。
只有 adb 命令有帮助,但一段时间后设备停止接收任何位置。
settings put secure location_providers_allowed -gps
settings put secure location_providers_allowed +gps
我已尝试将固件更新到 android 6 和 7。没有任何帮助。
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0, this);
....
public void onLocationChanged(Location location)
Log.d(TAG, (new Date(location.getTime())).toLocaleString());
【问题讨论】:
它是week number rollover bug。不要以为你可以做任何事情。 似乎没有为 WNRO 准备好二进制驱动程序 (/bin/gpsd)。如果至少没有三星(和博通)的帮助,这将无法解决(除非您能够进行逆向工程或编写自己的驱动程序)。 【参考方案1】:这与某些类型的 GPS 芯片上出现的GPS Week Number Rollover 问题有关。
一种解决方法是检测从location.getTime()
返回的值太旧(例如,在 2019 年之前),如果是,则添加差异(1024 周)。
这段代码应该可以在接下来的 20 年内使用:
long gpsTime = location.getTime();
// Adding 1024 weeks for chips with GPS Week Number Rollover issue
// 1024 * 7 * 24 * 60 * 60 * 1000 = 619315200000L
if ((gpsTime > 0) && (gpsTime < 1546300800000L))
gpsTime += 619315200000L;
【讨论】:
你会在哪里添加这个? 无论你在哪里使用location.getTime();
所以这是必须在应用程序中实现的东西?这将是非常不幸的,因为极不可能有人会为一些旧设备实现此功能。以上是关于2019 年 4 月 6 日之后从 Location.getTime 返回的日期错误(周数翻转)的主要内容,如果未能解决你的问题,请参考以下文章
Jquery Sortable table,只会对一个日期列进行排序