iphone - ¿Cómo verificar si los servicios de localización están habilitados para una aplicación en particular antes de iOS 4.2?
cllocationmanager ios-4.2 (3)
¿Cómo puedo verificar si el usuario ha permitido la ubicación de la aplicación mu? Normalmente usaría el método authorizationStatus
de la clase CLLocationManager
, pero solo está disponible en iOS 4.2 y versiones posteriores. ¿Es posible lograr esto de alguna manera mientras se usa SDK 4.2, de modo que la aplicación todavía se puede ejecutar en dispositivos con versiones anteriores de iOS, o tengo que degradar el SDK? Y en la misma línea, necesito una alternativa similar para el método locationServicesEnabled
anterior a iOS 4.0.
Cuando llame a -startUpdatingLocation
, si los servicios de ubicación fueron denegados por el usuario, el delegado del administrador de la ubicación recibirá una llamada a -locationManager:didFailWithError:
con el código de error kCLErrorDenied
. Esto funciona tanto en todas las versiones de iOS.
He combinado dos técnicas en el siguiente código
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];
}
Hmm .. No pensé usar authorizationStatus
o locationServicesEnabled
. Lo que hice fue lo siguiente:
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;
}
Me complace ver que hay un método mejor para verificar, pero no he tenido ningún problema con la forma en que detecto si mi aplicación puede usar el GPS.
¡Espero que esto ayude!