Sök…
Syntax
- desiredAccuracy
- distanceFilter
- requestLocation ()
- startUpdatingLocation ()
- allowDeferredLocationUpdates (untilTraveled: timeout :)
- startMonitoringSignificantLocationChanges ()
- allowDeferredLocationUpdates (untilTraveled: timeout :)
- authorizedAlways
- authorizedWhenInUse
- locationManager (_: didChangeAuthorization :)
Anmärkningar
Simulera en plats vid Runtime
- Kör appen från Xcode.
- Klicka på knappen "Simulera plats" i felsökningsfältet.
- Välj en plats från menyn.
Länk 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
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
.
Få alltid platstjänsttillstånd
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
.
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
.
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()