Проблема Android, выясняясь, насколько недавний почерк GPS

StackOverflow https://stackoverflow.com/questions/4418344

  •  08-10-2019
  •  | 
  •  

Вопрос

Мое приложение использует locationListener для отслеживания текущего местоположения. До тех пор, пока провайдер GPS предоставляет регулярные исправления, это хорошо работает. Тем не менее, я хочу, чтобы мое приложение предупредить пользователя, если местоположение больше не является надежным, потому что исправление больше не тока. Таким образом, я использовал TimeChechHandler, чтобы вызоветь Гелластикнуна каждые несколько секунд.

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

Далее я исследовал проблему, добавив код на onlocationChangedChanged (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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top