Sök…


Syntax

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

Anmärkningar

Simulera en plats vid Runtime

  1. Kör appen från Xcode.
  2. Klicka på knappen "Simulera plats" i felsökningsfältet.
  3. Välj en plats från menyn.

Simulera plats - felsökning

Länk CoreLocation Framework

Länka CoreLocation Framework

Importera CoreLocation-modulen i dina klasser som använder CoreLocation-funktionen.

//Swift
import CoreLocation

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

Begär tillåtelse att använda platstjänster

Kontrollera appens behörighetsstatus med:

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

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

Testa status mot följande konstanter:

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

Få platstjänsttillstånd medan appen används

Plats när du använder användningsdialog

Enklaste metoden är att initiera platshanteraren som en egenskap hos din root view-controller och placera behörighetsbegäran i sin viewDidLoad .

Detta får upp larmkontrollern som ber om tillstånd:

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

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

Lägg till NSLocationWhenInUseUsageDescription- nyckeln till din Info.plist . Värdet kommer att användas i varningskontrollens message .

ange bildbeskrivning här


Få alltid platstjänsttillstånd

ange bildbeskrivning här

För att be om tillåtelse att använda lokationstjänster även om appen inte är aktiv, använd följande samtal istället:

//Swift
locationManager.requestAlwaysAuthorization()

//Objective-C
[locationManager requestAlwaysAuthorization];

Lägg sedan till NSLocationAlwaysUsageDescription- nyckeln till din Info.plist . Återigen kommer värdet att användas i varningskontrollens message .

ange bildbeskrivning här

Lägg till egen anpassad plats med GPX-fil

För att leta efter platstjänster behöver vi verkliga enheter men för teständamål kan vi också använda simulator och lägga till vår egen plats genom att följa stegen nedan:

  • lägg till ny GPX-fil i ditt projekt.
  • i GPX-fil lägg till waypoints som
<?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>
  • gå sedan till produkt -> Schema -> Redigera schema och till RUN ställa in standardplats som ditt GPX-filnamn.

Platstjänster i bakgrunden

Om du vill använda standardplaceringstjänster medan applikationen är i bakgrunden måste du först aktivera Background Modes på fliken Funktioner i Målinställningarna och välj Location updates .

Bakgrundslägen

Eller lägg till den direkt i Info.plist.

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

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

Sedan måste du konfigurera CLLocationManager

Mål 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];

Snabb

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow