2010-11-22 11 views
16

Actualmente, mi aplicación solo solicita una vez permiso para usar la ubicación actual. Si el usuario no permite, no se le preguntará nuevamente a menos que restablezca la advertencia de ubicación en la configuración general. Me gustaría darle al usuario una oportunidad desde dentro de la aplicación para otorgar este permiso más adelante. En otras palabras, el cuadro de diálogo debería aparecer nuevamente si presiona un botón determinado. es posible?CLLocation pida nuevamente permiso

Gracias por su consejo.

+0

Probablemente no. Ese es el punto de tener que restablecer las advertencias de ubicación. – ryyst

Respuesta

9

Nueva Respuesta: Ahora en iOS 8 que programáticamente puede abrir la configuración del dispositivo de aplicación:

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 
[[UIApplication sharedApplication] openURL:url]; 

Si da soporte a versiones anteriores de iOS y quiere asegurarse de que esto se puede manejar, hacer esto:

if (&UIApplicationOpenSettingsURLString != NULL) { 
    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 
    [[UIApplication sharedApplication] openURL:url]; 
} 
else { 
    //Earlier iOS version 
} 

Respuesta anterior: No hay forma de que sepa forzar la ventana emergente nativa para aparecer (y permitir al usuario ir a la página de configuración).

Usted puede utilizar el siguiente método para determinar si el usuario ha permitido que los servicios de localización para su aplicación: CLLocationManager:

+(CLAuthorizationStatus)authorizationStatus 

También puede averiguar si los servicios de localización están habilitados a nivel mundial a nivel de dispositivo o no , también: CLLocationManager:

+(BOOL)locationServicesEnabled 
+0

Esto solo es parcialmente exacto. LocationServicesEnabled solo le informará sobre la configuración de los dispositivos, no sobre los permisos de ubicación de su aplicación. – Acey

14

[CLLocationManager locationServicesEnabled] sólo le dice si los servicios ubicaciones se permiten en el dispositivo.

según this documento.

[CLLocationManager authorizationStatus]

devolverá uno de estos

typedef enum { 
    kCLAuthorizationStatusNotDetermined = 0, 
    kCLAuthorizationStatusRestricted, 
    kCLAuthorizationStatusDenied, 
    kCLAuthorizationStatusAuthorized 
} CLAuthorizationStatus; 

si el resultado es kCLAuthorizationStatusDenied su podría decirle al usuario para permitir el uso de los servicios de localización enviándolo a la settings.app

Cuestiones relacionadas