Я использую встроенные API-интерфейсы geofence (игровые сервисы) и получаю смешанные результаты. Похоже, что после установки геозонности уведомления для входа/выхода очень несовместимы, даже когда GPS включен, с обновленным местоположением (LocationClient подключен, работает в фоновом режиме). Я начал отслеживать (опросить) изменения местоположения и дистанции в текстовом поле отладки, и увидел, что даже в том случае, когда на основе местоположения, зарегистрированного устройством, и местоположения геозоны я технически внутри/за пределами геозонности, уведомления иногда срабатывают, а иногда нет. Любой способ сделать это более предсказуемым? Я почти соблазн отказаться от этого api и реализовать свои собственные (отсечки батареи) геозоны на основе опроса местоположения устройства.
Как повысить согласованность уведомлений о входе/выходе Android geofence?
Ответ 1
Несколько предложений:
-
Убедитесь, что вы используете BroadcastReceiver, а не службу для получения переходов, иначе вы не сможете/не сможете ее получить, если ваше приложение будет убито/выключено. Как обсуждалось здесь: Android Geofence в конечном итоге перестает получать намерения перехода
-
Удостоверьтесь, что вы восстановили свои геофорумы после перезагрузки устройства, предпочтительно используя приемник для загрузки. Как обсуждалось здесь: Сохраняют ли Geofences в андроиде после перезагрузки устройства
-
Еще одно распространенное заблуждение, которое меня тошнило, так как оно отличается от IOS, заключается в том, что вы всегда получите триггер сразу для вновь созданного геообъекта, если устройство обнаруживает, что вы находитесь внутри геозоны при его создании, Я решил это сам, используя "льготный период" для вновь созданных геообъектов, которые я объяснил в этой теме: addProximityAlert не работает должным образом
Наконец, одна важная вещь: Наличие вашего LocationClient, подключенного в вашем приложении, или не , не имеет значения, если вы следуете приведенным выше пунктам. Мой процесс добавления или удаления Geofences в моем коде в основном:
-
Создайте и подключите locationclient.
-
В соединении-обратном вызове добавьте/удалите геозонность (ы)
-
В обратном вызове geofence-result отключите locationclient.
Каждый раз, когда это происходит, мой клиент местоположения подключается всего на несколько секунд. Операционная система по-прежнему будет получать предупреждения о геозонности и вызывать мой BroadcastReceiver всякий раз, когда они происходят.
Если вы сделаете это, я уверен, ваш опыт улучшится.
Надеюсь, это поможет!