Как сбросить центр региона при выходе из региона в фоновом режиме, используя CoreLocation

Моя идея проста в теории, но мне очень трудно ее реализовать. Я хочу создать геозону в местоположении пользователя, и когда пользователь выходит из этого региона, я хочу перецентрировать регион в обновленном местоположении пользователя. Вот поток:

  1. Получить текущее местоположение пользователя с помощью стандартного [CLLocationManager startUpdatingLocation]
  2. В locationManager:didUpdateLocations:, создайте геозону в текущем местоположении с помощью startMonitoringForRegion, а при последующих обновлениях местоположения повторно центрируйте этот регион
  3. В locationManager:didExitRegion:, который обычно вызывается из фона для пробуждения приложения, вызовите [CLLocationManager startUpdatingLocation], чтобы получить текущее местоположение пользователя для центрирования геозоны (центрируется в следующем обновленном местоположении, которое НЕ является текущей координатой центра региона),

Иногда это все работает, но чаще всего геозона не переходит правильно. Происходит то, что регион перецентрируется, и сразу вызывается locationManager:didExitRegion:, который помещает его в бесконечный цикл до тех пор, пока приложение не будет снова завершено. Поскольку оно прекращается без действительного отслеживаемого региона, приложение не будет активировано для обновления местоположения.

Это неправильное использование мониторинга региона? Я пытаюсь поиграть с различными способами отслеживания местоположения пользователя эффективным способом батареи (и не постоянно, используя стандартную startUpdatingLocation). Будет ли сочетание отслеживания изменений местоположения и мониторинга посещений более эффективным?

Спасибо!

0 ответов

Другие вопросы по тегам