Обновление местоположения, пока приложение находится в фоновом режиме или приостановлено - PullRequest
7 голосов
/ 27 апреля 2011

Приветствую всех.

Я пытаюсь внедрить существенное изменение местоположения и поддержку региона в мое приложение.Пока приложение активно, очевидно, нет проблем с получением обновлений местоположения.Мой вопрос заключается в том, как обрабатывать обновления, когда приложение не активно.

Это мое понимание того, что происходит, если обнаруживается значительное изменение местоположения или обнаружение входа / выхода из региона:

  • Еслиприложение находится в фоновом режиме или приостановлено, iOS вызывает locationManager: didUpdateToLocation: fromLocation: (или locationManager: didEnterRegion :) для моего существующего делегата местоположения.
  • Если приложение закрывается, iOS вызывает приложение: didFinishLaunchingWithOptions:ключ UIApplicationLaunchOptionsLocationKey в моем делегате приложения.На данный момент мне нужно создать новый экземпляр диспетчера местоположений, чтобы получить новое местоположение.

Это правильно?Я что-то упускаю?

Спасибо за помощь.

С уважением, - Джон

Ответы [ 3 ]

8 голосов
/ 28 апреля 2011

Вы отчасти правы.

Если приложение работает в фоновом режиме и используется существенное изменение местоположения:

  1. Приложение будет вызывать locationManager: locationDidUpdateToLocation: fromLocation
  2. Если приложение зависало в фоновом режиме, оно вызывает приложение: didFinishLaunchingWithOption: with UIApplicationLaunchOptionLocationKey. Затем вам нужно снова запустить диспетчер местоположения, чтобы получить существенное изменение местоположения. Это тогда войдет в locationManager: locationDidUpdateToLocation: fromLocation. Этот шаг важен

Если приложение работает в фоновом режиме, и вы используете мониторинг региона

  1. locationManager: locationDidUpdateToLocation: fromLocation не будет вызываться
  2. приложение вызывает locationManager: didEnterRegion:
3 голосов
/ 02 января 2015

Чтобы получить обновление местоположения, когда приложение находится в фоновом режиме по сравнению с тем, когда приложение приостановлено, 2 очень разные сценарии.Вам придется обращаться с ними по-другому.

Вы можете использовать ключ UIApplicationLaunchOptionsLocationKey, только если ваш locationManager использует метод startMonitoringSignificantLocationChanges, вы не можете использовать startUpdatingLocation.

Для получения обновления местоположения, когда

A) Приложение находится в фоновом режиме, см .: Фоновые службы определения местоположения не работают в iOS 7

B) Приложение приостановлено / завершено, см .: Как получить обновления местоположения для iOS 7 и 8 Даже когда приложение приостановлено

Я написал 2 очень длинных статьи, объясняющих различия между двумя сценариями.Исходные коды для вышеуказанного сценария 2 также доступны на GitHub.

0 голосов
/ 27 апреля 2011

Я считаю, что он всегда вызывает application: didFinishLaunchingWithOptions, если ваше приложение не на переднем плане.

...