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

У нас есть приложение, которое при действии пользователя пытается определить местоположение. Он прослушивает как 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 минут.

Это затрудняет точное определение того, где находится трубка ...

6
задан Peter Mortensen 16 August 2014 в 20:52
поделиться