2010-10-27 14 views
11

ho provato il mio dispositivo (iPod Touch 2G iOS 4.1) se i servizi di localizzazione sono abilitatilocationServicesEnabled sempre ritornare SI

permitted = [locationManager locationServicesEnabled]; 

e ho sempre ottenere un SI se i servizi di localizzazione sono abilitati o meno. Sto parlando del pulsante generale per i servizi di localizzazione e non del pulsante specifico dell'app. Su iPad con iOS 3.2.2 tutto funziona perfettamente.

risposta

4

Quando si implementa il delegato per il gestore posizione, è necessario implementare didFailWithError. Lì si otterrà l'errore appropriato se l'utente non ha permesso l'accesso al luogo

Apple Documentation States: Se l'utente nega l'utilizzo dell'applicazione del servizio di localizzazione, questo metodo segnala un errore di kCLErrorDenied. Dopo aver ricevuto tale errore, è necessario interrompere il servizio di localizzazione.

+0

ho fatto questo, ma sto parlando il pulsante generale di abilitazione/disabilitazione servizi di localizzazione (e non il pulsante extra per ogni app). Inoltre 'locationServicesEnabled' non dovrebbe restituire SÌ se è disabilitato. – testing

+0

molte persone si confondono con questo, ma leggi il link alla documentazione che ho fornito, restituirà sì .. devi controllare l'errore. –

+1

L'unica frase che posso trovare su questo è nella tua risposta. Quando "locationServicesEnabled" restituisce NO? Funziona sull'iPad ... Il punto per cui sono confuso sono 'Un valore booleano che indica se i servizi di localizzazione sono abilitati sul dispositivo.' E 'possibile abilitare o disabilitare i servizi di localizzazione dall'applicazione Settings attivando il pulsante dei Location Services in generale. Quindi non c'è alcuna differenza per l'interruttore generale e l'interruttore specifico dell'app. – testing

8

Quando si utilizza

[CLLocationManager locationServicesEnabled] 

allora si ispezionare se locationServices sono abilitati in tutto il sistema. Quindi, quando vai su Impostazioni -> Servizi di localizzazione e vedi quel primo interruttore. Questo metodo restituisce lo stato di quello stato e non è in relazione con la tua app.

Se è necessario sapere se l'app ha accesso ai servizi di localizzazione, utilizzare la risposta @Pascalius.

0

[CLLocationManager locationServicesEnabled] restituirà NO quando il pulsante di impostazione utente viene portato su OFF, solo allora ho raggiunto un NO.

0
if(![CLLocationManager locationServicesEnabled] || ([CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorizedWhenInUse && [CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorizedAlways)) 
{ 
     ; // app doesn't have access to localization to whatever you want 
} 
0

Swift 3.1 funzione restituisce -> Stato: Bool e message: String

func isLocationEnabled() -> (status: Bool, message: String) { 
    if CLLocationManager.locationServicesEnabled() { 
     switch(CLLocationManager.authorizationStatus()) { 
     case .notDetermined, .restricted, .denied: 
      return (false,"No access") 
     case .authorizedAlways, .authorizedWhenInUse: 
      return(true,"Access") 
     } 
    } else { 
     return(false,"Turn On Location Services to Allow App to Determine Your Location") 
    } 
} 
Problemi correlati