2010-08-04 8 views
8

Tengo servicios de ubicación deshabilitados para mi aplicación en el panel de configuraciones. Corro una prueba en la viewDidLoad en mi controlador de vista para ver si están habilitados:locationServicesEnabled prueba pasa cuando están deshabilitados en viewDidLoad

if([CLLocationManager locationServicesEnabled]) { 
    //Do something now 
} 

Esta prueba siempre pasa por alguna razón. Si intento acceder a los servicios de ubicación, aparece un error kCLErrorDenied para el administrador de ubicación. ¿Lo que da?

¿Estoy usando la prueba incorrecta?

Respuesta

25

El método de clase locationServicesEnabled solo prueba la configuración global para los servicios de ubicación. AFAIK, no hay manera de probar si su aplicación ha sido denegada explícitamente. Tendrá que esperar a que falle la solicitud de ubicación y usar el método CLLocationManagerDelegate locationManager: didFailWithError: para hacer lo que necesite. Ej .:

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

    NSString *errorString; 
    [manager stopUpdatingLocation]; 
    NSLog(@"Error: %@",[error localizedDescription]); 
    switch([error code]) { 
     case kCLErrorDenied: 
      //Access denied by user 
      errorString = @"Access to Location Services denied by user"; 
      //Do something... 
      break; 
     case kCLErrorLocationUnknown: 
      //Probably temporary... 
      errorString = @"Location data unavailable"; 
      //Do something else... 
      break; 
     default: 
      errorString = @"An unknown error has occurred"; 
      break; 
     } 
    } 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:errorString delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
    [alert show]; 
    [alert release]; 
} 

Consulte la documentación de las constantes CLError en el CLLocationManager class reference para más opciones.

+0

Eso tiene sentido entonces por qué siempre vuelve verdadero. ¡Gracias! – Adam

+0

@ Dan, si locationServicesEnabled es falso, entonces he esperado durante mucho tiempo, pero no se ha llamado al método delegado (locationManager: didFailWithError :). ¿¿cual es la razon?? – Apple

20

iOS 4.2 ahora permite determinar si los servicios de ubicación se han denegado a través del método CLLocationManager +authorizationStatus.

Cuestiones relacionadas