Почему locationmanager возвращает старые исправления местоположения с новой меткой времени получения?

#android #locationmanager #android-location

#Android #locationmanager #android-местоположение

Вопрос:

У нас есть приложение, которое после действий пользователя пытается получить исправление местоположения. Он прослушивает как GPS, так и сеть и имеет матрицу решений, основанную на времени / точности, чтобы определить, когда прекратить прослушивание и какое исправление вернуть.

Иногда мы замечали очень странное поведение. Мы используем классический способ узнать, сколько лет исправлению, например:

 long age = now - newLocation.getTime();
if(age >= prefs.getLocationMaxAge()){
    Log.d(TAG, "location too old.");
    return;
}
  

Но иногда возраст location.getTime, возвращаемого из ОС, составляет, возможно, 15-20 секунд, в соответствии с возвращенной меткой времени, хотя мы можем с уверенностью сказать, что он очень старый. Например, если исправление долготы / широты относится к позиции, в которой телефон был включен 30 минут назад!

Похоже, это происходит как по Wi-Fi, так и по сети, но не по GPS. Для меня это совершенно безумно. Кто-нибудь еще видел это и есть ли какой-нибудь способ обойти это?

Мы получили это на нескольких разных телефонах, последним из которых является Samsung Galaxy S II.

Помощь была бы очень кстати.

РЕДАКТИРОВАТЬ: чтобы быть действительно ясным, проблема в том, что обратный вызов «onlocationchanged» вызывается ОС с местоположением с возрастом метки времени, возможно, на пару секунд, когда я точно знаю, что долгота / широта в «новом» исправлении — это место, где телефон не был установлен.в течение как минимум 30 минут.

Это затрудняет точное определение того, где находится телефон…

Ответ №1:

Похоже, это происходит как с Wi-Fi, так и с сетью, но не с GPS

Это кажется справедливым, потому что при триангуляции на основе Wi-Fi и сетевых ячеек точность очень низкая. Вероятно, они используют кэшированные местоположения, которые датируются 30 минутами назад. Если вы не изменили свой сайт ячейки или не переехали в другое здание, чтобы можно было обнаружить новые точки доступа, боюсь, вы получите только кэшированные местоположения. Если вам нужны новые местоположения, используйте поставщика GPS.

Комментарии:

1. Я думаю, вы упускаете мою точку зрения. Кэшированные местоположения были бы прекрасны, если бы временная метка местоположения отражала это. Но использование кэшированного старого исправления и применение текущей временной метки — это безумие. я обновлю свой вопрос, чтобы он был еще более понятным.

2. Спасибо, что прояснили это; Я нашел виновника

3. ПРИВЕТ, парень, относительно этого я получил правильное местоположение, но когда я пытаюсь определить, сколько лет этому местоположению, используя ->> long age = System.currentTimeMillis() -location.getTime(); и в зависимости от этого значения я вычисляю, каково мое местоположение, но проблема в том, что иногда я получаю отрицательное значение (возраст). не удалось понять, почему, потому что этот возраст никогда не будет отрицательным