Получение уведомления о выходе из геозоны, находясь внутри

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

Это отлично работало с моим Galaxy Nexus летом, но начиная с ноября (2013 г.) я заметил, что началось какое-то странное поведение. Я только начал использовать новый Nexus 5 в качестве своего тестового устройства, и теперь я обнаружил, что события выхода отправляются, когда я все еще находился внутри геозоны. Геозона составляет 1500 м, и я зарегистрировал свое последнее известное местоположение, когда произошло событие выхода, и оно находится внутри зоны выхода.

Кажется, есть корреляция между событиями и тем, что мое устройство спит, а также снова включается, но я не могу действительно доказать, почему это происходит. Моя теория заключается в том, что, возможно, точность определения местоположения ухудшается, поэтому Play Services не может подтвердить, что я больше не нахожусь в зоне, и запускает событие выхода. Когда мое устройство снова включается и обновляет свое местоположение с помощью сети/wifi/gps, оно запускает новое событие входа. Следует также отметить, что я иногда теряю сотовую связь в своем офисе, когда мой телефон находится в кармане, когда я нахожусь в определенных конференц-залах.

Я протестировал идею игнорирования события выхода, когда последнее известное местоположение находится в пределах геозоны, но обнаружил, что это приведет к неправильной работе многих правильных событий выхода. Запрос обновления местоположения обычно терпит неудачу, так как я нахожусь внутри, и время ожидания обновления обычно истекает (попытка занимает около 2–4 минут). Кроме того, как только событие выхода будет отправлено, я получу новое событие входа в случайное время позже, поскольку Google Play определил, что я был за пределами зоны, и теперь меня снова находят внутри.

Кто-нибудь видел подобное поведение или имеет объяснение, почему это происходит? Кажется, я мало что могу с этим поделать, поскольку геозона добавлена ​​и работает правильно, но я не могу доверять тому, что события выхода всегда законны, что ставит под сомнение мои измерения времени.


person elgorbo    schedule 10.01.2014    source источник
comment
elgorbo -- Вы когда-нибудь находили ответ на эту проблему? У меня был подобный опыт со случайными ложными выходами из геозон Google Play Services. Я думаю, это связано с тем, что телефон на мгновение теряет Wi-Fi.   -  person TonyC    schedule 07.04.2015
comment
У меня никогда не было ничего конкретного. Почти уверен, что это происходит всякий раз, когда игровые сервисы обнаруживают, что точность определения местоположения падает до такой степени, что они не могут определить, находитесь ли вы внутри или вне геозоны. Вероятно, это произойдет всякий раз, когда обрывается какое-либо соединение.   -  person elgorbo    schedule 10.04.2015
comment
Случайные события выхода из геозоны происходят, когда сигналы GPS нарушаются и / или теряются (например, в помещении, в вашем офисе), тогда телефон переключается на сигнал сотовой связи, но местоположение сотовой связи неточное, поэтому у вас есть случайные ложные выходы.   -  person Gabor    schedule 21.05.2016
comment
@Gabor Я получаю выход даже после события входа через несколько секунд, я не выхожу из региона. и если я открою карты Google, он покажет 15 км от моего текущего местоположения. в чем проблема ? Пожалуйста, ответьте   -  person k_kumar    schedule 04.07.2019


Ответы (2)


Во-первых, я не разработчик. Я использовал AutoLocation + Tasker на своем Nexus 4 под управлением Android 4.3 со 100% удовлетворением. Мгновенный, точный и воспроизводимый. Я получил новый Nexus 5 в ноябре 2013 года и не смог заставить это приложение работать. Я испытал точные симптомы плюс больше. Я должен находиться внутри геозоны от 15 до 20 минут, прежде чем он распознает, что я внутри, и много раз в течение дня, пока я был внутри, он вызовет выход.

Я ждал обновления Android 4.4.1, затем 4.4.2. Я ждал Google Play Service 4.1, теперь 4.2. Ничего не работает. Я попробовал другое приложение Geofence Memo, которое использует тот же API и ту же проблему.

Я даже купил новый Red Nexus 5 с последним программным обеспечением и той же проблемой.

Я должен упомянуть, что мой старый Nexus 4 теперь работает под управлением Android 4.4, и этот AutoLocation + Tasker работает как шарм.

Когда я все еще использовал свой Nexus 4 на 4.3, я использовал гибридный модем, который включал LTE, и это приложение перестало работать, пока я не перепрошил заводской zip-архив модема.

Я думаю, что это связано с ошибкой основной полосы частот больше, чем с ошибкой Android, но я могу ошибаться.

Мои 2 Nexus 5 работают на 100% без рута.

Более того, у меня был включен экран телефона, когда я входил в геозону и существовал, думая, что это может быть проблема фонового процесса, и он полностью ее пропустил. Я даже пытался запустить GPS-навигацию через геозону, но она все еще не знала, где я нахожусь.

person Powergrep    schedule 14.02.2014

Как упоминалось в комментарии TonyC & Gabor

Я думаю, это связано с тем, что телефон на мгновение теряет Wi-Fi. — ТониС

Я тоже столкнулся с подобной проблемой, и, как заметил, это связано с проблемой сети.

Таким образом, решение для этого везде, где мы используем GeofencingEvent, у которого есть некоторый код, связанный с выходом и входом в геозону, просто проверьте также доступность сети.

GeofencingEvent geoFenceEvent = GeofencingEvent.fromIntent(intent);
    boolean isNetworkAvailable = CommonUtils.isNetworkAvailable(getApplicationContext());
    if (geoFenceEvent.hasError() || !isNetworkAvailable) {
        int errorCode = geoFenceEvent.getErrorCode();
        Log.e(TAG, "Location Services error: " + errorCode);
    } else{ // your code here}
person SimplyProgrammer    schedule 09.06.2017