Подтвердить что ты не робот

Как повысить согласованность уведомлений о входе/выходе Android geofence?

Я использую встроенные API-интерфейсы geofence (игровые сервисы) и получаю смешанные результаты. Похоже, что после установки геозонности уведомления для входа/выхода очень несовместимы, даже когда GPS включен, с обновленным местоположением (LocationClient подключен, работает в фоновом режиме). Я начал отслеживать (опросить) изменения местоположения и дистанции в текстовом поле отладки, и увидел, что даже в том случае, когда на основе местоположения, зарегистрированного устройством, и местоположения геозоны я технически внутри/за пределами геозонности, уведомления иногда срабатывают, а иногда нет. Любой способ сделать это более предсказуемым? Я почти соблазн отказаться от этого api и реализовать свои собственные (отсечки батареи) геозоны на основе опроса местоположения устройства.

4b9b3361

Ответ 1

Несколько предложений:

  • Убедитесь, что вы используете BroadcastReceiver, а не службу для получения переходов, иначе вы не сможете/не сможете ее получить, если ваше приложение будет убито/выключено. Как обсуждалось здесь: Android Geofence в конечном итоге перестает получать намерения перехода

  • Удостоверьтесь, что вы восстановили свои геофорумы после перезагрузки устройства, предпочтительно используя приемник для загрузки. Как обсуждалось здесь: Сохраняют ли Geofences в андроиде после перезагрузки устройства

  • Еще одно распространенное заблуждение, которое меня тошнило, так как оно отличается от IOS, заключается в том, что вы всегда получите триггер сразу для вновь созданного геообъекта, если устройство обнаруживает, что вы находитесь внутри геозоны при его создании, Я решил это сам, используя "льготный период" для вновь созданных геообъектов, которые я объяснил в этой теме: addProximityAlert не работает должным образом

Наконец, одна важная вещь: Наличие вашего LocationClient, подключенного в вашем приложении, или не , не имеет значения, если вы следуете приведенным выше пунктам. Мой процесс добавления или удаления Geofences в моем коде в основном:

  • Создайте и подключите locationclient.

  • В соединении-обратном вызове добавьте/удалите геозонность (ы)

  • В обратном вызове geofence-result отключите locationclient.

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

Если вы сделаете это, я уверен, ваш опыт улучшится.

Надеюсь, это поможет!