Recherche…


Syntaxe

  1. Exactitude désirée
  2. distanceFilter
  3. requestLocation ()
  4. startUpdatingLocation ()
  5. allowDeferredLocationUpdates (jusqu'àTraveled: timeout :)
  6. startMonitoringSignificantLocationChanges ()
  7. allowDeferredLocationUpdates (jusqu'àTraveled: timeout :)
  8. autoriséAlways
  9. authorisedWhenInse
  10. locationManager (_: didChangeAuthorization :)

Remarques

Simuler un emplacement au runtime

  1. Exécutez l'application depuis Xcode.
  2. Dans la barre de débogage, cliquez sur le bouton "Simuler l'emplacement".
  3. Choisissez un emplacement dans le menu.

Simuler un lieu - déboguer

Liaison du framework CoreLocation

Importez le module CoreLocation dans vos classes qui utilisent la fonctionnalité CoreLocation.

//Swift
import CoreLocation

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

Demander l'autorisation d'utiliser les services de localisation

Vérifiez le statut d'autorisation de l'application avec:

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

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

Testez le statut par rapport aux constantes suivantes:

//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;
}

Obtenir l'autorisation de service de localisation alors que l'application est en cours d'utilisation

Emplacement lors de l'utilisation du dialogue d'utilisation

La méthode la plus simple consiste à initialiser le gestionnaire d'emplacement en tant que propriété de votre contrôleur de vue racine et à placer la demande d'autorisation dans son viewDidLoad .

Cela ouvre le contrôleur d'alerte qui demande l'autorisation:

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

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

Ajoutez la clé NSLocationWhenInUseUsageDescription à votre Info.plist . La valeur sera utilisée dans l'étiquette de message du contrôleur d'alertes.

entrer la description de l'image ici


Obtenir toujours l'autorisation de service de localisation

entrer la description de l'image ici

Pour demander l'autorisation d'utiliser les services de localisation même lorsque l'application n'est pas active, utilisez plutôt l'appel suivant:

//Swift
locationManager.requestAlwaysAuthorization()

//Objective-C
[locationManager requestAlwaysAuthorization];

Ajoutez ensuite la clé NSLocationAlwaysUsageDescription à votre Info.plist . Là encore, la valeur sera utilisée dans l'étiquette de message du contrôleur d'alertes.

entrer la description de l'image ici

Ajouter un emplacement personnalisé à l'aide du fichier GPX

Pour vérifier les services de localisation, nous avons besoin d'un appareil réel, mais pour des raisons de test, nous pouvons également utiliser un simulateur et ajouter notre propre emplacement en suivant les étapes ci-dessous:

  • ajouter un nouveau fichier GPX dans votre projet.
  • dans le fichier GPX, ajoutez des waypoints comme
<?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>
  • puis allez à product -> Scheme -> Edit Scheme et dans RUN définissez l'emplacement par défaut comme nom de fichier GPX.

Services de localisation en arrière-plan

Pour utiliser les services de localisation standard pendant que l’application est en arrière-plan, vous devez d’abord activer les Background Modes dans l’onglet Capacités des paramètres de la cible, puis sélectionner Location updates .

Modes d'arrière-plan

Ou ajoutez-le directement à Info.plist.

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

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

Ensuite, vous devez configurer le CLLocationManager

Objectif 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];

Rapide

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow