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

Android 2019年4月6日之后从Location.getTime返回的日期错误(周数滚动),android,gps,android-gps,Android,Gps,Android Gps,我有一个根手机三星N7100(kitkat 4.4.2)。2019年4月6日之后,我开始获取日期为1999年的地点 有时地点的日期为2019年,但在2019年之后,设备将停止接收任何地点 settings put secure location_providers_allowed -gps settings put secure location_providers_allowed +gps 只有adb comand提供帮助,但一段时间后,设备停止接收任何位置 settings put sec

我有一个根手机三星N7100(kitkat 4.4.2)。2019年4月6日之后,我开始获取日期为1999年的地点

有时地点的日期为2019年,但在2019年之后,设备将停止接收任何地点

settings put secure location_providers_allowed -gps
settings put secure location_providers_allowed +gps
只有adb comand提供帮助,但一段时间后,设备停止接收任何位置

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());
}
这与某些类型的GPS芯片上出现的问题有关

解决此问题的一种方法是检测从
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;
long gpsTime=location.getTime();
//为存在GPS周数滚动问题的芯片增加1024周
//1024*7*24*60*60*1000=619315200000升
如果((gpsTime>0)和&(gpsTime<15463080000000L))
gpsTime+=619315200000L;

这是最重要的。不要认为你能对此做任何事情。看起来二进制驱动程序(/bin/gpsd)还没有为WNRO做好准备。如果没有至少三星(和Broadcom)的帮助,这是无法修复的(除非您能够进行反向工程或编写自己的驱动程序)。您将在哪里添加此功能?无论您在哪里使用
location.getTime()所以这是必须在应用程序中实现的东西?这将是非常不幸的,因为不太可能有人仅仅为一些旧设备实现这一点。