How can I check if the user has allowed location for mu app?
Normally I would use authorizationStatus
method of the CLLocationManager
class, but it
Hmm.. I didn't think to use authorizationStatus
or locationServicesEnabled
. What I did was the following:
MKUserLocation *userLocation = mapView.userLocation;
if (!userLocation.location) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled"
message:@"To re-enable, please go to Settings and turn on Location Service for this app."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
return;
}
I'm glad to see there's a better method to check, but I haven't had any problems with the way I detect if my app is allowed to use the GPS.
Hope this helps!
When you call -startUpdatingLocation
, if location services were denied by the user, the location manager delegate will receive a call to -locationManager:didFailWithError:
with the kCLErrorDenied
error code. This works both in all versions of iOS.
I've combined two techniques in the code below
MKUserLocation *userLocation = map.userLocation;
BOOL locationAllowed = [CLLocationManager locationServicesEnabled];
BOOL locationAvailable = userLocation.location!=nil;
if (locationAllowed==NO) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled"
message:@"To re-enable, please go to Settings and turn on Location Service for this app."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
} else {
if (locationAvailable==NO)
[self.map.userLocation addObserver:self forKeyPath:@"location" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil];
}