2019年4月6日之后从Location.getTime返回的日期错误(周转期)

时间:2019-05-15 10:52:23

标签: android gps android-gps

我有一部扎根的手机Samsung 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());
}

1 个答案:

答案 0 :(得分:0)

这与某些类型的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;