Ricerca…


Sintassi

  1. desiredAccuracy
  2. distanceFilter
  3. requestLocation ()
  4. startUpdatingLocation ()
  5. allowDeferredLocationUpdates (untilTraveled: timeout :)
  6. startMonitoringSignificantLocationChanges ()
  7. allowDeferredLocationUpdates (untilTraveled: timeout :)
  8. authorizedAlways
  9. authorizedWhenInUse
  10. locationManager (_: didChangeAuthorization :)

Osservazioni

Simula una posizione in fase di esecuzione

  1. Esegui l'app da Xcode.
  2. Nella barra di debug, fai clic sul pulsante "Simula posizione".
  3. Scegli una posizione dal menu.

Simula la posizione - debug

Collegamento di CoreLocation Framework

Importare il modulo CoreLocation nelle classi che utilizzano la funzionalità CoreLocation.

//Swift
import CoreLocation

//Objective-C
#import <CoreLocation/CoreLocation.h>

Richiedi il permesso di utilizzare i servizi di localizzazione

Verifica lo stato di autorizzazione dell'app con:

//Swift
let status: CLAuthorizationStatus = CLLocationManager.authorizationStatus()

//Objective-C
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

Verifica lo stato rispetto alle seguenti costanti:

//Swift
switch status {
case .NotDetermined:
    // Do stuff
case .AuthorizedAlways:
    // Do stuff
case .AuthorizedWhenInUse:
    // Do stuff
case .Restricted:
    // Do stuff
case .Denied:
    // Do stuff
}

//Objective-C
switch (status) {
    case kCLAuthorizationStatusNotDetermined:
        
        //The user hasn't yet chosen whether your app can use location services or not.
        
        break;
        
    case kCLAuthorizationStatusAuthorizedAlways:
        
        //The user has let your app use location services all the time, even if the app is in the background.
        
        break;
        
    case kCLAuthorizationStatusAuthorizedWhenInUse:
        
        //The user has let your app use location services only when the app is in the foreground.
        
        break;
        
    case kCLAuthorizationStatusRestricted:
        
        //The user can't choose whether or not your app can use location services or not, this could be due to parental controls for example.
        
        break;
        
    case kCLAuthorizationStatusDenied:
        
        //The user has chosen to not let your app use location services.
        
        break;
        
    default:
        break;
}

Ottenere l'autorizzazione del servizio di localizzazione mentre l'app è in uso

Posizione quando in uso Finestra di dialogo di utilizzo

Il metodo più semplice consiste nell'inizializzare il gestore località come proprietà del controller della vista radice e inserire la richiesta di autorizzazione nel suo viewDidLoad .

Questo fa apparire il controller degli avvisi che richiede il permesso:

//Swift
let locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()

//Objective-C
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestWhenInUseAuthorization];

Aggiungi la chiave NSLocationWhenInUseUsageDescription al tuo Info.plist . Il valore verrà utilizzato nell'etichetta del message del controller di message .

inserisci la descrizione dell'immagine qui


Ottenere sempre l'autorizzazione del servizio di localizzazione

inserisci la descrizione dell'immagine qui

Per chiedere il permesso di utilizzare i servizi di localizzazione anche quando l'app non è attiva, utilizzare invece la seguente chiamata:

//Swift
locationManager.requestAlwaysAuthorization()

//Objective-C
[locationManager requestAlwaysAuthorization];

Quindi aggiungi la chiave NSLocationAlwaysUsageDescription al tuo Info.plist . Anche in questo caso, il valore verrà utilizzato nell'etichetta del message del controller di message .

inserisci la descrizione dell'immagine qui

Aggiungi la tua posizione personalizzata usando il file GPX

Per verificare i servizi di localizzazione, abbiamo bisogno di un dispositivo reale, ma a scopo di test possiamo anche usare il simulatore e aggiungere la nostra posizione seguendo i seguenti passaggi:

  • aggiungi un nuovo file GPX nel tuo progetto.
  • nel file GPX aggiungi waypoint come
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode"> 
<!--
        Provide one or more waypoints containing a latitude/longitude pair. If you provide one
        waypoint, Xcode will simulate that specific location. If you provide multiple waypoints,
        Xcode will simulate a route visitng each waypoint.
 -->
<wpt lat="52.599878" lon="4.702029">
     <name>location name (eg. Florida)</name>
</wpt>
  • quindi vai al prodotto -> Schema -> Modifica schema e in RUN imposta la posizione predefinita come nome del tuo file GPX.

Servizi di localizzazione in background

Per utilizzare i servizi di localizzazione standard mentre l'applicazione è in background, è necessario innanzitutto attivare le Background Modes nella scheda Funzionalità delle impostazioni di destinazione e selezionare Location updates .

Modalità di background

Oppure, aggiungilo direttamente a Info.plist.

<key>NSLocationAlwaysUsageDescription</key>
<string>I want to get your location Information in background</string>

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
</array>

Quindi è necessario configurare CLLocationManager

Obiettivo C

//The Location Manager must have a strong reference to it.
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;

//Request Always authorization (iOS8+)
if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [_locationManager requestAlwaysAuthorization];
}

//Allow location updates in the background (iOS9+)
if ([_locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]) {
    _locationManager.allowsBackgroundLocationUpdates = YES;
}

[_locationManager startUpdatingLocation];

veloce

self.locationManager.delegate = self

if #available (iOS 8.0,*) {
    self.locationManager.requestAlwaysAuthorization()
}

if #available (iOS 9.0,*) {
    self.locationManager.allowsBackgroundLocationUpdates = true
}

self.locationManager.startUpdatingLocation()


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow