2010-09-30 11 views
12

IOS4 ha introducido recientemente la posibilidad de activar/desactivar servicios de ubicación para una aplicación específica.¿cómo puedo detectar la deshabilitación del servicio de ubicación para mi aplicación?

Necesito detectar si esta configuración es habilitada/deshabilitada para MI aplicación.

Primera He tratado con:

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

sin embargo, esto se refiere al servicio de localización global y no a la configuración de la aplicación específica.

Segunda me han tratado de utilizar

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

Funciona pero se llama a ambos en caso de aplicación de servicio de configuración de discapacitados y en otros casos como, por ejemplo, si una medida falla por alguna razones.

Necesito un código para detectar si se permite que mi solicitud para utilizar los servicios de localización.

¿Cómo puedo lograr esto?

Gracias por su apoyo

Respuesta

24

De la documentación de locationManager: didFailWithError:

Si el usuario niega uso de la aplicación del servicio de localización, este método informa de un error kCLErrorDenied. Al recibir dicho error, debe detener el servicio de ubicación.

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

Puede encontrar los otros códigos de error here.

1

Según el Apple docs on CLLocationManager, hay una propiedad llamada + (BOOL)locationServicesEnabled que debería hacer justamente eso.

+0

Ese es el método preferido en mi opinión. ¡Gracias! –

+1

locationServicesEnabled está en el nivel del dispositivo. authorizationStatus es para la aplicación individual. –

10

Yo prefiero usar

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

sobre la propiedad locationServicesEnabled ya que se refiere al nivel de teléfono, no su aplicación.

Cuestiones relacionadas