Неправильная дата возвращена из Location.getTime после 6 апреля 2019 года (перенос номера недели) - PullRequest
0 голосов
/ 15 мая 2019

У меня рутированный телефон Samsung N7100 (kitkat 4.4.2).После 6 апреля 2019 года я начал получать местоположения с датой 1999 года.

Иногда местоположения приходят с датой 2019 года, но после этого устройство перестает получать любые местоположения.

Помогает только команда adb, но через некоторое время устройство перестает получать какие-либо местоположения.

settings put secure location_providers_allowed -gps
settings put secure location_providers_allowed +gps

Я попытался обновить прошивку до Android 6 и 7. Nothings помогает.

mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0, this);
....

public void onLocationChanged(Location location) {
  Log.d(TAG, (new Date(location.getTime())).toLocaleString());
}

1 Ответ

1 голос
/ 29 мая 2019

Это связано с проблемой Перенос номера недели GPS , которая появляется на некоторых типах чипов 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;
...