Как использовать API Geofencing для Android?
Я тестировал новый API сервиса Google Geofencing.
Я загрузил образец кода из сайта разработчиков Android. Затем я запустил пример кода на устройстве Android (Galaxy Note 2).
Я разместил геопозицию и радиус своего офиса до 10 м, но когда я подошел к своему офису, ничего не случилось.
При запуске кода примера я заметил, что, когда я уже в диапазоне геозонности, а затем добавляю геозонность к LocationClient
, ничего не происходит.
Я уже прочитал LocationClient
документацию по классу и нашел следующий абзац:
Если поставщик сетевого местоположения отключен пользователем, служба geofence перестанет обновляться, все зарегистрированные геофотоснимки будут удалены, а намерение будет создано предоставленным ожидающим намерением. В этом случае hasError(Intent)
возвращает true и getErrorCode(Intent)
возвращает GEOFENCE_NOT_AVAILABLE
. "
Итак, я включил Wi-Fi и шел к моему офису (внутри geofence), а затем получил уведомление о "геозонности".
У меня есть следующие вопросы:
-
Работает ли геообработка только с WiFi?
-
Почему не работает местоположение, предоставляемое моей сетью 3G?
-
Является ли это ошибкой в примере кода?
-
Или это моя ошибка?
Ответы
Ответ 1
Если вы используете только сотовую сеть, точность местоположения ниже, чем точность wi-fi или gps (если вы открываете Google Maps, синий круг - это оценка вашей текущей позиции - если вы используете только 3GP, круг может иметь радиус даже сотни метров).
В последние дни я работаю над приложением с использованием Geofences, и я понял следующее: IMHO запись геозонности срабатывает только в том случае, если ВСЕ этот "круг оценки местоположения" находится внутри радиуса геофенсации, то есть, если есть 100% вероятность того, что вы вступил в геозонность. Так что это зависит от того, какой большой радиус вы установили. Если вы установите только 10 метров, это, вероятно, будет работать только с GPS, никогда с 3GP. Для 3GP вам нужно будет установить радиус, равный 1000 м.
Ответ 2
Wifi используется для отслеживания вашего местоположения. Использование сигналов Wi-Fi и сигналов ячеек для триангуляции вашей позиции - это более эффективное решение, чем постоянное использование вашего GPS. Кроме того, он работает в ситуациях, когда GPS не будет такой, как большие многолучевые области и внутри помещений.
Ответ 3
в случае сетевого состояния вы должны увеличить радиус не менее 1000 М, потому что, используя сетевой провайдер для извлечения текущего местоположения, он занимает место рядом с сетевой башней. Но в случае состояния GPS и Wi-Fi он работает более точно (1 М также).
Ответ 4
Я думал, что поделился бы своими результатами здесь. Я также разработал лабораторное приложение, которое реализует API местоположения Google Play Services и API Geofence. Мои результаты показывают, что код определения местоположения имеет своего рода патологическую неспособность признать свои ошибки.:)
При нажатии кнопки мое приложение создает геозонность в текущем местоположении ( "curLoc" ), возвращаемом API местоположения с радиусом 30 метров. На экране я показываю расстояние до центра геоцентра ( "distToCenter" ), вызывая curLoc.distanceTo(fenceLoc) и обновляя его примерно каждую секунду.
Я запускаю приложение и жду, пока точность не стабилизируется (обычно на 10,0 м), затем нажмите кнопку, чтобы создать забор. Я получаю событие "enter" немедленно. Я очищаю событие и иду на прогулку и, по-видимому, вступаю в пространственно-временную аномалию. Я иду по блоку и за углом, а значение distToCenter только увеличилось примерно на 4 метра. Я иду дальше, пока не окажусь в 300 метрах от моего дома (судя по шагам подсчета), и dstToCenter постепенно увеличивается. Событие выхода geofence, наконец, срабатывает около 20 секунд. После того, как dstToCenter пройдет выше 30 метров.
Я жду, чтобы увидеть, где расстояние стабилизируется, и это около 150-их метров. Я поворачиваюсь и возвращаюсь домой, и происходит такое же отставание в крайнем положении. Я сажусь за свой рабочий стол, пока моя червоточина находится примерно в 90 метрах. Примерно через 40 секунд мой доппельгангер попадает в забор, и примерно через 20 секунд я получаю событие ввода.
В этот момент я все еще где-то на переднем тротуаре (в 7,4 метрах), пробираясь к входной двери.
ПРИМЕЧАНИЕ. Источник был "слит", хотя я видел, что значок состояния сети GPS включается и мигает в течение нескольких секунд после того, как я потерял связь с моим WiFi. Что еще, точность никогда не колебалась с 10,0 метров.
лжецы!
:)
Ответ 5
Я тестировал образец приложения geofence, и если Wi-Fi отключен, он не обнаруживает события geofence на версии меньше, чем Android 4.3.
Android 4.3 и выше работает даже при отключении Wi-Fi.