Проблема с Android в выяснении того, как недавно было установлено последнее исправление GPS - PullRequest
6 голосов
/ 11 декабря 2010

Мое приложение использует LocationListener для отслеживания текущего местоположения.Пока GPS-провайдер предоставляет регулярные исправления, это работает хорошо.Тем не менее, я хочу, чтобы мое приложение предупреждало пользователя, если местоположение больше не является надежным, поскольку исправление уже не актуально.Поэтому я использовал timeCheckHandler для вызова getLastKnownLocation каждые несколько секунд.

Моя проблема заключается в том, что даже при частом получении точных исправлений время, возвращаемое путем применения getTime () к местоположению, возвращенному getLastKnownLocation, обычно старше, чемтекущее время, возвращаемое System.currentTimeMillis (), часто примерно на 20 секунд.

Я исследовал проблему дальше, добавив код в onLocationChanged (arg0) для регистрации времени исправления (arg0.getTime ())и текущее время (System.currentTimeMillis ()).Снова я вижу разницу примерно в 20 секунд.

Код в настоящее время читается следующим образом:

    public void onLocationChanged(Location arg0) {
    mapview.handleLocationChanged(mapview, arg0.getLatitude(), arg0.getLongitude(), arg0.getBearing(), arg0.getAccuracy(), "GPS fix");
    addDebugNote("Fix received at time: "+Long.toString(arg0.getTime()/1000)+" Now: "+Long.toString((System.currentTimeMillis())/1000));
}

и типичный вывод в мой файл отладки гласит:

Fix received at time: 1292091908 Now: 1292091928

Почему я должен видеть эту разницу между временем исправления и текущим системным временем?

Должен ли я признать, что разница в 20 секунд - это нормально?

Ответы [ 2 ]

20 голосов
/ 19 декабря 2010

Время определения местоположения GPS зависит от времени вашего провайдера / времени устройства.System.currentTimeMillis () предоставит вам время устройства, установленное на вашем устройстве.

Если вы хотите узнать, какой недавней является точка, вы можете:

  1. Синхронизировать оба времени(GPS и устройство) в вашем коде при запуске приложения, принимая разницу между ними, как только вы получите первое обновление местоположения GPS.В этот момент запросите время устройства и посмотрите, в чем разница между ними.Сохранить эту разницу в переменной.

Также я обнаружил, что используя NETWORK в качестве поставщика местоположения, вы можете получить только время устройства.Поэтому, если вы прослушиваете обновления как из GPS (так и из сети), вам также может понадобиться определить это с помощью location_obj.getProvider () и отфильтровать провайдера GPS.

1 голос
/ 12 декабря 2010

Повторяя тест сегодня, я обнаружил, что разница между временем GPS и временем системы составляет 22 секунды. Эта проблема обсуждается в другом месте в Интернете, и кажется, что есть разница между временем GPS и системным временем телефона (которое в моем случае настроено на автоматическое обновление из сети). Одним из факторов является то, что GPS время составляет около 15 или 17 секунд (в зависимости от того, какой источник является правильным) от времени UTC ... оно не синхронизировано, поскольку время GPS не обновлялось с 1980 года для периодических «високосных секунд».

Имея это в виду, я думаю, что ответом на мою необходимость проверить, насколько актуальным является последнее исправление, будет сравнение текущего системного времени с системным временем (не временем GPS) последнего исправления.

...