2011-02-08 13 views
5

Ho sperimentato con CLLocationManager per un'app che sto costruendo. Capisco come verificare se i servizi di localizzazione sono abilitati e se un utente ha autorizzato la mia app a utilizzare la loro posizione corrente.Notifiche per le modifiche ai servizi di localizzazione?

Se un utente consente la mia applicazione per utilizzare la loro posizione iniziale, e quindi l'utente sia:

  1. trasforma i servizi di localizzazione in modo esplicito
  2. mette il telefono in modalità aereo
  3. esplicitamente de-autorizza la mia app per utilizzare la loro posizione

Sono le notifiche pubblicate che posso sottoscrivere e rispondere automaticamente quando riaprono la mia app?

In caso contrario, sarebbe il modo migliore per gestire questo scenario (in modo che possa aggiornare le viste che visualizzavano le coordinate GPS) per inserire manualmente questo controllo nei metodi applicationDidFinishLaunching e applicationWillEnterForeground di AppDelegate?

La ragione per cui stavo pensando che dovrebbe andare lì è perché quando riavvii un'app, viewWillAppear non viene attivato per la prima vista e se tale visualizzazione deve cambiare da mostrare le coordinate GPS a un messaggio amichevole chiedendo loro di abilitare i servizi di localizzazione, gli AppDelegates erano il miglior aggancio che potessi pensare.

Grazie!

risposta

2

Il tuo approccio è valido. Se trovi che Core Location non è disponibile durante la riapertura dell'app o se l'accesso alla rete è cambiato, puoi inviare una notifica a quei viewControllers che devono essere aggiornati di conseguenza. Controlla NSNotificationCenter

Anche se si adotta quanto sopra, suggerirei di fare questo controllo ogni volta in viewDidAppear in ogni caso come l'accesso alla rete potrebbe essere perso in qualsiasi momento. Inoltre test in linea in cui si effettua il controllo della posizione.

+0

Grazie per la risposta. Penso che userò 1) viewWillAppear per coprire l'avvio iniziale dell'app e ogni volta che una vista viene caricata sullo schermo anche dopo il suo caricamento iniziale, e 2) applicationWillEnterForeground per coprire riaprire l'app dallo sfondo. Nel mio test, viewDidAppear viene chiamato solo la prima volta che viene caricata una vista, quindi non vorrei utilizzarla nel caso in cui la raggiungibilità della rete fosse cambiata mentre erano ancora nell'app. – djibouti33

16

Su iOS 4.2 e successivamente si otterrà una chiamata delegato

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status; 
+1

Questa dovrebbe essere la risposta accettata –

Problemi correlati