2011-05-06 7 views
7

Cuando utilizamos servicios de ubicación en una aplicación, recibimos una alerta de iOS que indica que la aplicación está tratando de usar la ubicación actual: Permitir/No permitir.Llamada de alerta de servicio de ubicación iOS

¿Tenemos una llamada de delegado para estos botones?

Quiero manejar el toque en "No permitir".

Respuesta

15

Usted no tiene acceso directo a la alerta.

Si el usuario presiona "No permitir", o si la aplicación no tiene permiso para usar los servicios de ubicación, entonces CLLocationManager llamará al locationManager:didFailWithError: en su delegado. El dominio de error será kCLErrorDomain y el código de error será kCLErrorDenied.

+0

Este es un buen consejo, pero me parece que la alerta se muestra antes de obtener esta devolución de llamada, o incluso la devolución de llamada didChangeAuthorizationStatus. ¿Hay algo mas que pueda hacer? – elsurudo

+0

@elsurudo, probablemente ya se haya dado cuenta de esto, pero para el registro, Apple muestra esa alerta tan pronto como inicia las actualizaciones de ubicación en CLLocationManager. Si desea informar visualmente al usuario por qué está a punto de solicitar al sistema su ubicación, deberá crear su propia IU para eso y evitar iniciar el administrador de ubicación hasta que esté seguro de que el usuario ha pulsado o ha pasado de largo. su UI – clozach

3

También debe verificar si el usuario ha permitido servicios de ubicación para su aplicación antes de iniciar el administrador de ubicación. Use el método de clase CLLocationManagerlocationServicesEnabled para verificar.

Aquí está el doc:

locationServicesEnabled

devuelve un valor booleano que indica si los servicios de localización están activados en el dispositivo.

+ (BOOL)locationServicesEnabled

Valor de retorno SÍ, si los servicios de localización están activados o NO si no lo son.

Discusión El usuario puede habilitar o deshabilitar por completo los servicios de ubicación desde la aplicación Configuración al alternar el interruptor en Configuración> General> Servicios de ubicación.

Debe verificar el valor de retorno de este método antes de comenzar las actualizaciones de ubicación para determinar si el usuario tiene servicios de ubicación habilitados para el dispositivo actual. Si este método devuelve NO e inicia las actualizaciones de ubicación de todos modos, el marco de Ubicación principal le solicita al usuario un panel de confirmación que le preguntará si los servicios de ubicación deberían volver a habilitarse.

+0

Esto es un poco peligroso ya que esto determina si los Servicios de ubicación se activan o desactivan, por lo que un usuario puede tener los servicios de ubicación activados, pero desactivados para su aplicación específicamente. – RickiG

+0

No es peligroso en absoluto, de hecho, Apple recomienda verificar si los servicios de localización están habilitados antes de iniciar un administrador de ubicación (consulte el código de ejemplo de LocateMe en los documentos). Esto es lo primero que debe verificar. También debe verificar kCLErrorDenied en el delegado. –

+0

Estaba un poco vago, lo siento. Estaba destinado como una advertencia para no solo confiar en [CLLocationManager locationServicesEnabled] únicamente porque el usuario podría tener los servicios de ubicación activados en general, pero desactivados para su aplicación :) – RickiG

6

Usted puede conseguir simplemente la acción seleccionada, como a continuación:

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { 
    if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) { 
     [self addRegion]; 
    } 
    else if (status == kCLAuthorizationStatusDenied) { 
     NSLog(@"Location access denied"); 
    } 
} 

Asegúrese de ajustar el delegado de gerente de locación.

+2

Gracias solución perfecta ... –

Cuestiones relacionadas