iOS
Podstawowa lokalizacja
Szukaj…
Składnia
- pożądana Dokładność
- distanceFilter
- requestLocation ()
- startUpdatingLocation ()
- allowDeferredLocationUpdates (tillTraveled: timeout :)
- startMonitoringSinentantLocationChanges ()
- allowDeferredLocationUpdates (tillTraveled: timeout :)
- autoryzowane zawsze
- authorisedWhenInUse
- locationManager (_: didChangeAuthorization :)
Uwagi
Symuluj lokalizację w środowisku wykonawczym
- Uruchom aplikację z Xcode.
- Na pasku debugowania kliknij przycisk „Symuluj lokalizację”.
- Wybierz lokalizację z menu.
Link CoreLocation Framework
Zaimportuj moduł CoreLocation do swoich klas korzystających z funkcji CoreLocation.
//Swift
import CoreLocation
//Objective-C
#import <CoreLocation/CoreLocation.h>
Poproś o pozwolenie na korzystanie z usług lokalizacyjnych
Sprawdź status autoryzacji aplikacji za pomocą:
//Swift
let status: CLAuthorizationStatus = CLLocationManager.authorizationStatus()
//Objective-C
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
Sprawdź status pod kątem następujących stałych:
//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;
}
Uzyskiwanie uprawnienia do usługi lokalizacji, gdy aplikacja jest w użyciu
Najprostszą metodą jest zainicjowanie menedżera lokalizacji jako właściwości kontrolera widoku głównego i umieszczenie żądania uprawnień w jego viewDidLoad
.
Spowoduje to wyświetlenie kontrolera alertów, który prosi o pozwolenie:
//Swift
let locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
//Objective-C
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestWhenInUseAuthorization];
Dodaj klucz NSLocationWhenInUseUsageDescription do swojej Info.plist . Wartość zostanie użyta w etykiecie message
kontrolera alertów.
Zawsze uzyskiwanie pozwolenia na usługi lokalizacyjne
Aby poprosić o pozwolenie na korzystanie z usług lokalizacyjnych, nawet gdy aplikacja nie jest aktywna, użyj następującego połączenia:
//Swift
locationManager.requestAlwaysAuthorization()
//Objective-C
[locationManager requestAlwaysAuthorization];
Następnie dodaj klucz NSLocationAlwaysUsageDescription do Info.plist . Ponownie wartość zostanie użyta w etykiecie message
kontrolera alertów.
Dodaj własną niestandardową lokalizację za pomocą pliku GPX
Aby sprawdzić usługi lokalizacyjne, potrzebujemy prawdziwego urządzenia, ale do celów testowych możemy również użyć symulatora i dodać własną lokalizację, wykonując następujące czynności:
- dodaj nowy plik GPX do swojego projektu.
- w pliku GPX dodaj punkty orientacyjne takie jak
<?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>
- następnie przejdź do produktu -> Schemat -> Edytuj schemat i w RUN ustaw domyślną lokalizację jako nazwę pliku GPX.
Usługi lokalizacyjne w tle
Aby korzystać ze standardowych usług lokalizacyjnych, gdy aplikacja jest w tle, musisz najpierw włączyć Background Modes
w zakładce Możliwości ustawień celu i wybrać Location updates
.
Lub dodaj go bezpośrednio do Info.plist.
<key>NSLocationAlwaysUsageDescription</key>
<string>I want to get your location Information in background</string>
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
Następnie musisz skonfigurować CLLocationManager
Cel 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];
Szybki
self.locationManager.delegate = self
if #available (iOS 8.0,*) {
self.locationManager.requestAlwaysAuthorization()
}
if #available (iOS 9.0,*) {
self.locationManager.allowsBackgroundLocationUpdates = true
}
self.locationManager.startUpdatingLocation()