Как реализовать "un-live" в андроидных геоформатах?
У меня проблема с пониманием геодрофов Androids.
Актуальная проблема: я использовал события Enter
+ Exit
из googles geofence-api, но на многих устройствах сигнал настолько неточен, что он вскакивает и выходит из забора (часто прыжки больше радиуса 400 м).
Планируемое решение: Поэтому я хочу использовать Dwell
для "сглаживания" этого. Если местоположение хранится внутри забора в течение минуты, происходит остановка. Все идет нормально. Но как определить отпуск забора? Когда я использую Exit
, из-за этих сигнальных импульсов может произойти несколько Exit
. То, что мне нужно, - это нечто вроде "ненадежно", когда я оставляю геозонность более минуты.
Я хочу избежать переопределения всей Geofence с помощью настраиваемой логики, которая регистрируется на быстрых повторных геопозициях и отфильтровывает небольшие выбросы.
Вопрос: Есть ли что-то в geofence-api для достижения "ненаделения"? Или есть лучшая практика, как проверить, является ли Exit
реальным выходом?
Ответы
Ответ 1
public long lastEnterTime = 0;
public void initTimer(){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if(lastEnterTime!=0 && System.currentTimeMillis() > lastEnterTime + 1000*60){
lastEnterTime = System.currentTimeMillis();
onRealEnter();
}
}
},0,1000);
}
public void onRealEnter(){
}
public void onEnter(){
lastEnterTime = System.currentTimeMillis();
}
public void onExit(){
lastEnterTime = 0;
}
Ответ 2
В Google Geofences, триггерах события Ввод каждый раз, когда вы вводите геозонность, срабатывает событие Exit каждый раз, когда вы пересекаете границу Geofence. Также срабатывает событие Dwell, когда вы остаетесь в пределах геозонности в течение заданного интервала времени.
В вашем случае, если вы продолжаете прыгать в и из геозонности менее чем за одну минуту, Dwell никогда не произойдет.
Если вы вводите геозонность, триггеры Ввод, а затем вы остаетесь внутри в течение одной минуты или более, Dwell произойдет, и после того, как Dwell произойдет, если вы обратите внимание на любое событие Выход, вы можете использовать это событие Exit в качестве реального выхода.
Примечание. Вы также можете увеличить радиус Geofence.
Надеюсь, мой ответ будет вам понятен.:)
Ответ 3
Это всего лишь идея, но для каждой области вы можете зарегистрировать два геозоны с разным радиусом. Зарегистрируйтесь, чтобы прослушать DWELL для геозонности с меньшим радиусом, а для EXIT для другого.
Ответ 4
Вы можете использовать setNotificationResponsiveness
, чтобы установить более длительное время оповещения, поэтому вы не получите событие выхода, если оно не останется за пределами забора за такое количество времени, поэтому прыжки не будут вызывать события выхода, если они произойдут в течение этого времени