2016-01-26 4 views
15

У меня проблема с пониманием геодрой Андроидов.Как реализовать «un-stay» в андроидных геоформатах?

Актуальные проблемы: Я использовал Enter + Exit события из Googles геозоны-апи, но на многих устройствах сигнал настолько неточны, что он прыгает в и забор (прыжки больше радиуса 400м часто).

Запланированное решение: Поэтому я хочу использовать Dwell, чтобы «сгладить» это. Если местоположение хранится внутри забора в течение минуты, происходит остановка. Все идет нормально. Но как определить отпуск забора? Когда я использую Exit, может произойти несколько Exit из-за этих сигналов. То, что мне нужно, - это нечто вроде «ненадежно», когда я оставляю геозонность более минуты.

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

Вопрос: Есть ли что-то в geofence-api для достижения «ненадежно»? Или есть лучшая практика, как проверить, действительно ли Exit является реальным выходом?

+0

эй, как это получилось для вас @ Jens? – sirvon

+1

, так как есть много голосов по моему вопросу, но почти ничего по ответам/предложениям, я думаю, что не существует чего-то готового или лучшего. То, что я делаю в настоящее время, состоит в том, чтобы поиграть с двумя подходами: один, чтобы реализовать «undwell», что означает: on-EXIT. Я начинаю обновление периодического местоположения и получаю 3 обновления местоположения. Если все 3 все еще снаружи, я принимаю его как реальный выход, а затем удаляю слушателя. Второй эксперимент состоит в том, чтобы делать фехтование самостоятельно с помощью locationUpdates и сам сглаживать (используя 3 или даже 5 местоположений, игнорируя выбросы). – Jens

+0

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

ответ

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; 
    } 
+0

ответ скорее похож на альтернативную реализацию для «живого», а не на мое желание «невзирая». Также 1 секунда, кажется, хуже, чем другие обходные пути (например, только запуск таймера 1-го таймера для повторной проверки, если пользователь действительно покинул забор). :( – Jens

1

В Google Геозоны, Введите триггеры событий каждый раз при входе в Geofence, Выход триггеры событий каждый раз, когда вы пересекаете boundry в Geofence. Также Dwell Событие триггеров, когда вы остаетесь в пределах геосферы в течение заданного промежутка времени.

В вашем случае, если вы продолжаете прыгать внутрь и выходить из геофорума менее чем за одну минуту, Dwell никогда не произойдет.

Если ввести Geofence, Enter триггеры событий, а затем оставаться внутри в течение одной минуты или более, Dwell будет происходить, и после задержки происходит, если вы заметили какие-либо Выход событие, вы можете используйте это событие Exit как настоящий Exit.

Примечание. Вы также можете увеличить радиус Geofence.

Надеюсь, мой ответ будет вам понятен. :)

+0

Это не работает, так как вы получаете Exit немедленно в onExit, а не как live. Поэтому, если вы используете live + exit, вы получаете что-то вроде: (ignored enter) -> live-> exit -> (ignored enter) -> exit -> (ignored enter) -> exit -> (ignored enter) -> live-> exit – Jens

+0

В моем случае я никогда не замечал никаких прыжков в и из забора. Попробуйте проверить API LocationServices. получая местоположение? Попытайтесь получить более точное местоположение. Это может устранить проблему. –

+0

Я уже создал testversion, добавлял ли я 'requestLocationUpdates' с высокой точностью и интервалом 30 секунд, дополнительно к Geofences. также приносит еще больше этих «прыжков». Я получил несколько пользователей геологов, где они не переместили телефон, и я добавил эти значения 30s на карте. Вы можете видеть, как 30 значений внутри забора, а затем 1 значение в 500 метрах а затем следующие 30 значений снова внутри. И это происходит у всех поставщиков. Обходной путь, который я нашел до сих пор, - запросить позицию каждые несколько секунд и сгладить сигнал. Это убивает батарею. – Jens

1

Это всего лишь идея, но для каждой области вы можете зарегистрировать два геозонда с разным радиусом. Зарегистрируйтесь, чтобы прослушать DWELL для геозонности с меньшим радиусом, а для EXIT для другого.

+0

Событие EXIT по-прежнему остается проблемой, поскольку оно запускается немедленно. Таким образом, это не решит проблему «прыжка». Но то, что могло бы работать на основе этой идеи, было бы внешним великим геозондом, также слушая DWELL. Если внешний DWELL запущен, а внутренний находится в состоянии EXIT, это подразумевает, что вы находитесь снаружи. Тем не менее, есть еще 2 проблемы. Один из них заключается в том, что время может быть плохим, и вы просто прыгаете внутрь меньшего забора, когда DWELLING наружный забор. Другое дело, что вы не знаете скорость обновления, поэтому внешний забор должен быть таким же огромным, как город или страна. – Jens

0

Вы можете использовать setNotificationResponsiveness, чтобы установить более длительное время оповещения, поэтому вы не получите событие выхода, если оно не находится за пределами забора на этот промежуток времени, поэтому прыжки не будут вызывать события выхода, если они происходят внутри на этот раз

 Смежные вопросы

  • Нет связанных вопросов^_^