Когда приложение iphone получает didChangeAuthorizationStatus: делегат вызова? - PullRequest
8 голосов
/ 01 сентября 2011

У меня вопрос по поводу CLLocationManagerDelegate. В документации сказано, что если пользователь изменит настройки для ваших служб определения местоположения (в файле Settings.app для iPhone), то ваше приложение должно получить сообщение didChangeAuthorizationStatus: для делегата. У меня вопрос, когда это произойдет?

Если пользователь изменил настройку, это означает, что он находится в приложении настроек, а ваше приложение либо фоновое, либо вообще не работает, поэтому в первом случае, когда делегат CLLocationManager вашего приложения получит didChangeAuthorizationStatus: звоните

Ответы [ 5 ]

9 голосов
/ 02 сентября 2011

Я только что наткнулся на этот метод час назад, так что время вопроса хорошее!

Похоже, в моем случае этот метод вызывается:

  1. Когда приложение становится активным.
  2. Включение служб определения местоположения для приложения при первоначальном запуске приложения.

Я написал приложение для быстрого тестирования, которое вы можете найти здесь:

https://github.com/mharper/LocationServices

Он просто регистрирует статус авторизации при каждом вызове метода.

6 голосов
/ 26 января 2014

Этот метод делегата будет вызван, когда:

  1. При первом запуске CLLocationManager экземпляр

    1.1.Если вы впервые запускаете приложение на устройстве, вы получите состояние kCLAuthorizationStatusNotDetermined, прежде чем пользователь увидит [Разрешить / Не разрешать] UIAlertView.(В настоящее время вы можете обнаружить, что UISwitch вашего приложения в меню «Настройки - Конфиденциальность - Служба определения местоположения» отключено или не отображается.

    1.2. Когда пользователь перезапустил ваше приложение. Поскольку решение было принятосделано в предыдущем запуске, так что вы можете получить состояние.

  2. Первый раз после того, как пользователь принял решение. Это очевидно. После вызова startUpdatingLocation / startUpdatingHeading, затем iOSпокажите UIAlertView.

  3. В ситуации с вашим ответом пользователь внес изменения в настройки, если ваше приложение работает в фоновом режиме, вы получите новое состояние, когда ваше приложение станет активным.В противном случае ссылка 1.2.

1 голос
/ 17 августа 2012

Если ваше приложение работает в фоновом режиме или не работает вообще, оно будет вызываться в тот момент, когда пользователь вернется в ваше приложение.

0 голосов
/ 31 декабря 2015

Недавно я столкнулся с проблемой правильной обработки изменений прав доступа и провел много исследований и отладок.

Если приложение вообще не работает и пользователь меняет разрешения на местоположение в Настройках, то при запуске приложения locationManager: didChangeAuthorizationStatus вызывается, когда менеджер местоположений инициализируется, как указано в ответе mharper. Такое поведение отсутствует в документации Apple.

Если приложение находится в фоновом режиме / приостановлено, я протестировал его в симуляторе, и похоже, что также вызывается функция делегата.

0 голосов
/ 12 августа 2015

Я также сталкиваюсь с той же проблемой.

Мое решение состоит в том, чтобы поместить код авторизации запроса gps в основной цикл.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...