Suche…


Syntax

  1. gewünschte Genauigkeit
  2. distanceFilter
  3. requestLocation ()
  4. startUpdatingLocation ()
  5. allowDeferredLocationUpdates (untilTraveled: Zeitüberschreitung :)
  6. startMonitoringSignificantLocationChanges ()
  7. allowDeferredLocationUpdates (untilTraveled: Zeitüberschreitung :)
  8. immer autorisiert
  9. AuthorizedWhenInUse
  10. locationManager (_: didChangeAuthorization :)

Bemerkungen

Simulieren Sie einen Ort zur Laufzeit

  1. Führen Sie die App über Xcode aus.
  2. Klicken Sie in der Debugleiste auf die Schaltfläche "Standort simulieren".
  3. Wählen Sie einen Ort aus dem Menü.

Standort simulieren - debuggen

CoreLocation Framework verknüpfen

Importieren Sie das CoreLocation-Modul in Ihre Klassen, die die CoreLocation-Funktion verwenden.

//Swift
import CoreLocation

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

Berechtigung zur Verwendung von Standortdiensten anfordern

Überprüfen Sie den Autorisierungsstatus der App mit:

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

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

Testen Sie den Status anhand der folgenden Konstanten:

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

Standortdienst-Berechtigung abrufen, während die App verwendet wird

Ort, wenn Verwendungsdialog verwendet wird

Die einfachste Methode besteht darin, den Standortmanager als eine Eigenschaft Ihres Root-View-Controllers zu initialisieren und die Berechtigungsanforderung in seinen viewDidLoad .

Dadurch wird der Alert Controller aufgerufen, der um Erlaubnis fragt:

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

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

Fügen Sie der Info.plist den Schlüssel NSLocationWhenInUseUsageDescription hinzu . Der Wert wird im message des Alert Controller verwendet.

Geben Sie hier die Bildbeschreibung ein


Immer Standortdienst-Erlaubnis abrufen

Geben Sie hier die Bildbeschreibung ein

Um die Erlaubnis für die Verwendung von Ortungsdiensten zu erfragen, auch wenn die App nicht aktiv ist, verwenden Sie stattdessen den folgenden Anruf:

//Swift
locationManager.requestAlwaysAuthorization()

//Objective-C
[locationManager requestAlwaysAuthorization];

Fügen Sie dann den Schlüssel NSLocationAlwaysUsageDescription zu Ihrer Info.plist hinzu . Der Wert wird wieder in der message des Alert Controller verwendet.

Geben Sie hier die Bildbeschreibung ein

Fügen Sie mithilfe der GPX-Datei einen eigenen benutzerdefinierten Speicherort hinzu

Um nach Standortdiensten zu suchen, benötigen wir ein echtes Gerät. Zu Testzwecken können wir auch den Simulator verwenden und unseren eigenen Standort hinzufügen, indem Sie die folgenden Schritte ausführen:

  • Fügen Sie Ihrem Projekt eine neue GPX-Datei hinzu.
  • in GPX-Datei fügen Sie Wegpunkte wie hinzu
<?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>
  • Gehen Sie dann zu Produkt -> Schema -> Schema bearbeiten und legen Sie im RUN-Standardverzeichnis den Namen Ihrer GPX-Datei fest.

Standortdienste im Hintergrund

Um Standard-Ortungsdienste zu verwenden, während sich die Anwendung im Hintergrund befindet, müssen Sie zunächst auf der Registerkarte Funktionen der Background Modes die Background Modes und Location updates auswählen.

Hintergrundmodi

Oder fügen Sie es direkt zur Info.plist hinzu.

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

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

Dann müssen Sie den CLLocationManager einrichten

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

Schnell

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow