Переход Android Google Geofencing прыгает, даже если устройство не движется

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

Приложение использует последнюю версию Google Geofencing API с типами перехода GEOFENCE_TRANSITION_ENTER и GEOFENCE_TRANSITION_EXIT со сроком действия NEVER_EXPIRE и ACCESS_FINE_LOCATION. Пользователи также безуспешно настроили большой радиус в 2000 метров. Локации установлены с высокой точностью.

Но переходы прыгают от выхода к входу, даже аппарат стоит на столе в доме и не двигается.

Как я могу улучшить это в приложении?


person egmontr    schedule 05.01.2016    source источник
comment
Это может быть ограничением технологии определения местоположения. GPS плохо работает в зданиях.   -  person Henry    schedule 05.01.2016
comment
Пользователь задал местоположение с высокой точностью, а значит использует не только GPS, но и GSM и WiFi. Другие его устройства в том же месте работают хорошо.   -  person egmontr    schedule 05.01.2016


Ответы (1)


Геозоны Google в основном используют сетевые точки, которые полагаются на Wi-Fi и вышки сотовой связи и подвержены разным уровням точности. Это вызывает множество «скачков» точек местоположения, которые геозона регистрирует как события входа и выхода. Один из способов предотвратить это — сделать вызов GPS в событии перехода, чтобы убедиться, что пользователь действительно ушел. Если пользователь ушел, отправить уведомление, если нет, сбросить геозону с INITIAL_TRIGGER_EXIT, установленным в GeofencingRequest.

person Pablo Baxter    schedule 13.01.2016
comment
Хорошая идея, но в этом случае это невозможно, потому что я использую истечение NEVER_EXPIRE. Таким образом, у меня будет забор выход и забор вход/выход, который уже сообщил о выходе, а затем скоро сообщит о входе. Пользователь и действия за ним будут сбиты с толку. - person egmontr; 13.01.2016
comment
В своем BroadcastReciever или IntentService, как только вы убедились, что событие на самом деле было ложным (с помощью GPS), возьмите геозоны, вызвавшие нарушение, и при необходимости измените их (используйте Geofence.Builder для повторного создания с использованием того же идентификатора запроса), и повторно добавьте их. Если вы используете тот же идентификатор запроса для геозоны, он не создает новый, а просто обновляет его. - person Pablo Baxter; 13.01.2016
comment
Хорошо я понял. попробую реализовать. - person egmontr; 20.01.2016
comment
Просто интересно, удалось ли кому-нибудь из вас найти решение этой проблемы, поскольку я в настоящее время тоже застрял в этой проблеме. - person Haris; 06.03.2017
comment
Даже после того, как вы следовали инструкциям, данным в ответе? - person Pablo Baxter; 06.03.2017
comment
Единственные координаты GPS, которые я получаю в событии перехода, - это те, на которые перепрыгнул пользователь, а не истинное местоположение устройства. @ПаблоБакстер - person Haris; 07.03.2017
comment
Точки, указанные геозоной, обычно являются сетевыми точками и не очень точны. Что вы хотите сделать, так это, когда вы получите событие геозоны, возьмите точку GPS, чтобы проверить событие. Если вы на самом деле не вышли, просто сбросьте геозону, в противном случае выполните любое действие, которое вы хотели сделать. - person Pablo Baxter; 07.03.2017