12

IOS4 has recently introduced the possibility to enable/disable location services for a specific application.

I need to detect if this settings is enabled/disabled for MY application.

First I have tried with:

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

however this refers to the global location service and not to the specific application setting.

Second I have tried to use

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

It works but it gets called both in case of service app setting disabled and in other cases like, for example, if a measure fails for some reasons.

I need a code to detect if MY application is allowed to use location services.

How can i achieve this?

Thanks for your support

Massimo
  • 231
  • 1
  • 3
  • 7

3 Answers3

24

From the documentation for locationManager: didFailWithError:

If the user denies your application’s use of the location service, this method reports a kCLErrorDenied error. Upon receiving such an error, you should stop the location service.

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

You can find the other error codes here.

Kris Markel
  • 12,142
  • 3
  • 43
  • 40
10

I prefer to use

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

over the locationServicesEnabled property as it refers to the phone level, not your application.

Joe
  • 2,352
  • 20
  • 38
1

According to the Apple docs on CLLocationManager, there is a property called + (BOOL)locationServicesEnabled that should do just that.

Nicu Surdu
  • 8,172
  • 9
  • 68
  • 108