Как обнаружить отключение службы определения местоположения для моего приложения? - PullRequest
12 голосов
/ 30 сентября 2010

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

Мне нужно определить, является ли этот параметр включенным / отключенным для МОЕГО приложения.

Первый Я пробовал с:

if ([CLLocationManager locationServicesEnabled])
    {
       ....
    } 

однако это относится к глобальной службе определения местоположения, а не к настройке конкретного приложения.

Второй Я пытался использовать

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

Работает , но вызывается как в случае отключения настройки приложения-службы, так и в других случаях, например, в случае сбоя меры по некоторым причинам.

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

Как мне этого добиться?

Спасибо за вашу поддержку

Ответы [ 3 ]

24 голосов
/ 30 сентября 2010

Из документации для locationManager: didFailWithError:

Если пользователь отрицает ваше приложение использование службы определения местоположения, это Метод сообщает об ошибке kCLErrorDenied. Получив такую ​​ошибку, вы следует остановить службу определения местоположения.

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    if ([[error domain] isEqualToString: kCLErrorDomain] && [error code] == kCLErrorDenied) {
        // The user denied your app access to location information.
    }
}

Другие коды ошибок можно найти здесь .

10 голосов
/ 16 января 2013

Я предпочитаю использовать

-(BOOL)locationAuthorized {
  return ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized);
}

в свойстве locationServicesEnabled, которое относится к уровню телефона, а не к вашему приложению.

1 голос
/ 09 мая 2012

Согласно документации Apple на CLLocationManager , существует свойство с именем + (BOOL)locationServicesEnabled, которое должно делать именно это.

...