Intereting Posts
Настольный webkit-эквивалент addJavascriptInterface () от Android? Невозможно убрать / скрыть значок тревоги на Android 5.0 Lollipop Android set scrollLeft при обновлении контента в событии прокрутки не обновляет позицию полосы прокрутки Как написать Java.util.Map в пакет по разумному пути? Начальная активность в образе просмотра изображения в адаптере пользовательского массива Как вернуть результат деятельности Child в Parent в android? Изменение контактной информации Как программно спарить и подключить Bluetooth-устройство HID (Bluetooth-клавиатуру) на Android SMS Получено в моем приложении SMS и в Hangouts, хотя я вызываю abortBroadcast () Как запустить onListItemClick в Listactivity с помощью кнопок в списке? Как установить атрибут layout_weight динамически из кода? Ошибка камеры «Не удается подключиться к камере» или на некоторых телефонах появляется ошибка «Камера используется другим приложением», Как написать правильный обработчик с помощью getMessage? AsyncTask onPreExecute progressdialog Почему в моем проекте не будут работать библиотеки поддержки Android?

Проблема с 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 секунд в норме?

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

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

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

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

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

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

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