2

Я работаю над приложением с функциями геообработки, используя the Google Play Services APIs.Android Geofencing: частые неправильные события EXIT/ENTER, в то время как устройство на самом деле стационарно в заборе

Это хорошо работает в целом, за исключением того, что я часто получаю «ложные срабатывания», что означает, что я быстро получаю события EXIT, за которыми следуют события ENTER, даже если устройство находится на самом деле внутри геозонности и не двигается.

Ситуация немного улучшилась, когда я начал слушать события DWELL, а не ENTER (с потерей времени 3 минуты). Я использую радиус 100 м для заборов.

Но при этом я по-прежнему получаю неправильные события EXIT. В идеале я хотел бы иметь эквивалент времени ожидания, но для событий EXIT (возможность получать уведомления о событиях EXIT только в том случае, если устройство было видно из забора, по крайней мере, за x минут). Я думаю, что это решит проблему; К сожалению, API не имеет такой функции.

Является ли эта проблема общей, и что можно сделать для ее решения?

+0

Просто интересно, сумеете ли вы когда-нибудь найти решение этой проблемы, поскольку я в настоящее время тоже застрял в этой проблеме и буду очень благодарен за помощь. – Haris

+0

@ Харис К сожалению, не было простого решения. Единственный способ, которым я нашел, - это вручную запланировать события, которые произойдут позже, и отменить их, когда служба сообщит ... Сложная и нечистая :( – BoD

ответ

2

Проблема возникает, когда определение текущего геолокации зависит от башни сотового телефона, к которому подключен ваш мобильный телефон. если ваш телефон переключает сотовые башни, и они находятся далеко друг от друга, сервер Google предполагает, что вы переехали.

я решил подобную проблему путем введения временной задержки перед реакцией на событие:

Таймер сбрасывается (если он активен), а затем запускается, если происходит событие.

eventhandling выполняется, когда событие таймера происходит и только тогда, когда новое государство событие отличается от Previos состояния события

Пример: если таймер имеет задержку 5 минут все изменения событий ниже времени задержки будет игнорировать. если событие таймера предыстории было введено, и новое событие таймера вводит ничего не делать.

+0

В результате я создал аналогичное обходное решение (вручную назначил таймер для переходов EXIT). на самом деле не является удовлетворительным, код сложный. Я бы хотел, чтобы существовал эквивалент прожиточного минимума, но для переходов EXIT. – BoD

0

У меня возникла аналогичная проблема. В настоящее время я экспериментирую с несколькими решениями. Один использует https://pathsense.com. Другая - отфильтровать базу событий геозонности на точности местоположения запуска. Согласно теории k3b, событие geofence запускается из-за местоположения ячейки на базе башни. Если это правда, я считаю, что неопределенность будет высокой, потому что одна ячейковая башня имеет что-то вроде радиуса в 1 милю. Это также может быть опровергнуто, если вы установили режим местоположения только на датчик, таким образом, он использует GPS только для данных.

До сих пор я еще ничего не сделал. Используя фильтрацию, о которой я упоминал, я смог уменьшить ложные срабатывания примерно на 80%, но это все равно происходит ежедневно, что неприемлемо как потребительское приложение.

+0

Спасибо за совместное использование - фильтрация по точности - хорошая идея, я рассмотрю ее. – BoD

+0

@ user3063925; о ваших тестах с PathSense? Я очень недоволен геологией Google Play, которая иногда работает, иногда нет. Очень ненадежна.Я прочитал веб-сайт PathSense, и он выглядит очень многообещающим. – bsautermeister

+0

Мы пробовали PathSense и решили против него. Когда мы протестировали его, у него была очевидная ошибка, например, спам приложения с событиями, если устройство находилось в режиме самолета. Поскольку Google заявляет о повышении точности местоположения на 40% в год, мы просто придерживаемся стандартных сервисов Google Play. – user3063925