Zoeken…


Syntaxis

  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 :)

Opmerkingen

Simuleer een locatie tijdens runtime

  1. Voer de app uit vanaf Xcode.
  2. Klik in de foutopsporingsbalk op de knop "Locatie simuleren".
  3. Kies een locatie in het menu.

Simuleer locatie - debuggen

Koppeling van CoreLocation Framework

Importeer de CoreLocation-module in uw klassen die CoreLocation-functionaliteit gebruiken.

//Swift
import CoreLocation

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

Toestemming vragen om locatieservices te gebruiken

Controleer de autorisatiestatus van de app met:

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

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

Test de status met de volgende constanten:

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

Toestemming voor locatieservice verkrijgen terwijl de app in gebruik is

Locatie in gebruik Dialoogvenster Gebruik

De eenvoudigste methode is om de locatiemanager te initialiseren als een eigenschap van uw rootview-controller en het toestemmingsverzoek in zijn viewDidLoad .

Dit brengt de waarschuwingscontroller naar voren die om toestemming vraagt:

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

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

Voeg de sleutel NSLocationWhenInUseUsageDescription toe aan uw Info.plist . De waarde wordt gebruikt in het message de waarschuwingscontroller.

voer hier de afbeeldingsbeschrijving in


Altijd toestemming voor locatieservice krijgen

voer hier de afbeeldingsbeschrijving in

Gebruik in plaats daarvan de volgende oproep om toestemming te vragen voor het gebruik van locatieservices, zelfs als de app niet actief is:

//Swift
locationManager.requestAlwaysAuthorization()

//Objective-C
[locationManager requestAlwaysAuthorization];

Voeg vervolgens de sleutel NSLocationAlwaysUsageDescription toe aan uw Info.plist . Nogmaals, de waarde wordt gebruikt in het message de waarschuwingscontroller.

voer hier de afbeeldingsbeschrijving in

Voeg een eigen aangepaste locatie toe met behulp van het GPX-bestand

Om te controleren op locatieservices hebben we een echt apparaat nodig, maar voor testdoeleinden kunnen we ook een simulator gebruiken en onze eigen locatie toevoegen door de onderstaande stappen te volgen:

  • voeg een nieuw GPX-bestand toe aan uw project.
  • voeg in GPX-bestand waypoints toe zoals
<?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>
  • ga dan naar product -> Schema -> Schema bewerken en stel in RUN de standaardlocatie in als uw GPX-bestandsnaam.

Locatieservices op de achtergrond

Als u standaardlocatieservices wilt gebruiken terwijl de applicatie op de achtergrond staat, moet u eerst Background Modes inschakelen op het tabblad Mogelijkheden van de Doelinstellingen en Location updates selecteren.

Achtergrondmodi

Of voeg het rechtstreeks toe aan de Info.plist.

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

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

Vervolgens moet u de CLLocationManager instellen

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

Snel

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow