Цель C - CLLocationManager выяснить, когда нажимается «Разрешить» или «Не разрешать» - PullRequest
4 голосов
/ 28 сентября 2011

При выполнении CLLocationManager существует ли метод делегата, который вызывается, когда пользователь нажимает на запрос «Разрешить» или «Не разрешать» в этом запросе на использование Location?

Я пробовал это, но это не вызывается после того, как пользователь "Разрешить" или "Не разрешать".

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status;

Кроме того, есть ли переменная, которая скажет мне, что выбрал пользователь?

Я попробовал следующее, но это всегда возвращает true.

locationManager.locationServicesEnabled

Спасибо,
Тройник

Ответы [ 4 ]

7 голосов
/ 04 июля 2014

Для этого есть метод делегата

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized) {
        // user allowed
    }

}
4 голосов
/ 07 сентября 2012

[CLLocationManager locationServicesEnabled] сообщает только, если на устройстве включена служба определения местоположения.

[CLLocationManager authorizationStatus] возвращает актуальный статус, который вы ищете.

1 голос
/ 28 сентября 2011

Вам нужно будет реализовать didFailWithError: метод:

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {

    if ([error domain] == kCLErrorDomain) {

        // We handle CoreLocation-related errors here
        switch ([error code]) {
        // "Don't Allow" on two successive app launches is the same as saying "never allow". The user
        // can reset this for all apps by going to Settings > General > Reset > Reset Location Warnings.
        case kCLErrorDenied:

        case kCLErrorLocationUnknown:

        default:
            break;
        }

    } else {
    // We handle all non-CoreLocation errors here
    }
}

РЕДАКТИРОВАТЬ: Глядя на ссылку CLLocationManager, я нашел это:

+ (CLAuthorizationStatus)authorizationStatus

Возвращаемое значение Значение, указывающее, авторизовано ли приложение пользоваться услугами определения местоположения.

Обсуждение Статус авторизации данного приложения управляется системой и определяется несколькими факторами. Заявки должны быть прямо разрешено использовать услуги определения местоположения пользователем и службы определения местоположения должны быть в настоящее время включены для системы. Эта авторизация происходит автоматически, когда ваша заявка Первые попытки использовать службы определения местоположения.

0 голосов
/ 15 октября 2016

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

Используйте CLLocationManager.authorizationStatus(), если вам нужно выяснить статус в определенный момент времени или внедрить

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status;

Обратите внимание, что начиная с iOS 8, запрос на авторизацию не выполняется автоматически, когда ваше приложение впервые пытается использовать службы определения местоположения.Вам нужно явно позвонить requestWhenInUseAuthorization(), прежде чем вызывать startUpdatingLocation() в вашем CLLocationManager экземпляре.

И убедитесь, что в Info.plist есть ключ NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription, в зависимости от того, какой тип авторизации вы хотите получить.Если они отсутствуют, нет ошибок, нет журналов, нет подсказок, нет ничего, что укажет вам правильное направление:)

...