Intereting Posts
До родительской активности – на Android Ошибка: не удается изменить зависимости конфигурации «: приложение: _debugAnnotationProcessor» после того, как оно было разрешено Сообщение EditText setError не очищается после ввода Не удалось найти класс android.support.v4.app.NotificationCompat $ Builder Eclipse: как восстановить настройки по умолчанию в перспективе? Получение события, если файл был загружен / добавлен в папку загрузки Комбинируйте Xamarin и React Native в одном приложении Что-то странное происходит при слишком быстрой прокрутке RecyclerView Android: одиночная активность, несколько просмотров Android Eclipse все шрифты Spinner стали белыми Как изменить индикатор tablayout сверху вниз? Пользовательский дочерний класс приложения в Mono для Android Обнаруживает, подключена ли гарнитура к устройству Android или нет. Как скопировать и отредактировать файлы в оболочке Android? Android OpenGL – ES Текстурное кровотечение

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

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

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

Я еще раз исследовал проблему, добавив код toLocationChanged (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)); } 

И типичный вывод в мой файл Debug:

 Fix received at time: 1292091908 Now: 1292091928 

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

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

Solutions Collecting From Web of "Проблема с Android, выясняя, как последнее последнее исправление GPS"

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

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

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

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

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

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

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