Я делаю приложение, которое определяет, как долго вы остаетесь в геозоне. Отметка времени берется при обнаружении события входа и сравнивается с меткой времени, полученной при получении события выхода.
Это отлично работало с моим Galaxy Nexus летом, но начиная с ноября (2013 г.) я заметил, что началось какое-то странное поведение. Я только начал использовать новый Nexus 5 в качестве своего тестового устройства, и теперь я обнаружил, что события выхода отправляются, когда я все еще находился внутри геозоны. Геозона составляет 1500 м, и я зарегистрировал свое последнее известное местоположение, когда произошло событие выхода, и оно находится внутри зоны выхода.
Кажется, есть корреляция между событиями и тем, что мое устройство спит, а также снова включается, но я не могу действительно доказать, почему это происходит. Моя теория заключается в том, что, возможно, точность определения местоположения ухудшается, поэтому Play Services не может подтвердить, что я больше не нахожусь в зоне, и запускает событие выхода. Когда мое устройство снова включается и обновляет свое местоположение с помощью сети/wifi/gps, оно запускает новое событие входа. Следует также отметить, что я иногда теряю сотовую связь в своем офисе, когда мой телефон находится в кармане, когда я нахожусь в определенных конференц-залах.
Я протестировал идею игнорирования события выхода, когда последнее известное местоположение находится в пределах геозоны, но обнаружил, что это приведет к неправильной работе многих правильных событий выхода. Запрос обновления местоположения обычно терпит неудачу, так как я нахожусь внутри, и время ожидания обновления обычно истекает (попытка занимает около 2–4 минут). Кроме того, как только событие выхода будет отправлено, я получу новое событие входа в случайное время позже, поскольку Google Play определил, что я был за пределами зоны, и теперь меня снова находят внутри.
Кто-нибудь видел подобное поведение или имеет объяснение, почему это происходит? Кажется, я мало что могу с этим поделать, поскольку геозона добавлена и работает правильно, но я не могу доверять тому, что события выхода всегда законны, что ставит под сомнение мои измерения времени.