iOS
Emplacement central
Recherche…
Syntaxe
- Exactitude désirée
- distanceFilter
- requestLocation ()
- startUpdatingLocation ()
- allowDeferredLocationUpdates (jusqu'àTraveled: timeout :)
- startMonitoringSignificantLocationChanges ()
- allowDeferredLocationUpdates (jusqu'àTraveled: timeout :)
- autoriséAlways
- authorisedWhenInse
- locationManager (_: didChangeAuthorization :)
Remarques
Simuler un emplacement au runtime
- Exécutez l'application depuis Xcode.
- Dans la barre de débogage, cliquez sur le bouton "Simuler l'emplacement".
- Choisissez un emplacement dans le menu.
Link CoreLocation Framework
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
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.
Obtenir toujours l'autorisation de service de localisation
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.
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
.
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()