Геозоны не работают должным образом

пример создания и мониторинга геозон на github не работает должным образом , Геозоны в сервисах Google Play не работают должным образом.

Я читал в другом месте в Stack Overflow, что Рето Мейер упомянул в Google IO, что GPS включится, только если телефон приблизится к геозоне для экономии заряда батареи. Кажется, что он вообще не включается.

Вот ситуация:

  • У меня есть эмулятор с API Google (то же самое происходит с реальным телефоном).
  • У меня установлено вышеупомянутое приложение из коробки и добавлен Geofence.
  • У меня есть файл KML, который позволяет мне входить в геозону и выходить из нее.

Gofence ENTER не срабатывает.

Теперь, чтобы убедиться, что KML действительно работает, я открываю карты Google. Я играю в KML и вижу, как синяя точка «Вы здесь» красиво перемещается в геозону и выходит из нее, а геозоны действуют срабатывают.

Пока Google Maps запущен и работает, я вижу индикатор GPS в строке состояния.

Итак, мне кажется, что Goefence срабатывает только в том случае, если явно включен GPS.

Может кто-нибудь объяснить это, пожалуйста? Здесь, в Stack Overflow, много вопросов, связанных с одной и той же проблемой.

Спасибо.

РЕДАКТИРОВАНИЕ. Проведены полевые испытания с реальным телефоном. Пока приложение Location Updates работало и отслеживало меня пример создания и мониторинга геозон получал события ENTER/EXIT. Как только я убил приложение «Обновления местоположения», приложение «Геозоны» перестало получать события ENTER/EXIT.

Мне кажется, что Google оптимизировал энергопотребление для геозон до бесполезности.


person Rastio    schedule 23.01.2015    source источник


Ответы (1)


Я нашел решение. Это злоупотребление, но это единственный способ сделать Geofence полезным.

Все, что мне нужно сделать, это запросить обновления местоположения:

mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(
            mGoogleApiClient, mLocationRequest, mGeofencePendingIntent);

И теперь мы можем зарегистрировать геозоны.

Вот мое понимание того, почему это работает: согласно documentation: "Если ваше приложение хочет пассивно наблюдать за обновлениями местоположения, инициируемыми другими приложениями, но не потреблять дополнительную энергию в противном случае, используйте PASSIVE_PROVIDER Этот провайдер не включает и не изменяет активные поставщики геолокации"

Мне кажется, добавленная геозона - это один из PASSIVE_PROVIDERS. Это объясняет, почему геозона срабатывала, когда были открыты Карты Google.

Конечно, мы могли бы использовать PRIORITY_BALANCED_POWER_ACCURACY. вместо ВЫСОКОГО (~40 м точность), чтобы сэкономить заряд батареи и быть умнее о том, когда мы ставим геозону и на какой срок.

person Rastio    schedule 26.01.2015