Szukaj…


Składnia

  1. pożądana Dokładność
  2. distanceFilter
  3. requestLocation ()
  4. startUpdatingLocation ()
  5. allowDeferredLocationUpdates (tillTraveled: timeout :)
  6. startMonitoringSinentantLocationChanges ()
  7. allowDeferredLocationUpdates (tillTraveled: timeout :)
  8. autoryzowane zawsze
  9. authorisedWhenInUse
  10. locationManager (_: didChangeAuthorization :)

Uwagi

Symuluj lokalizację w środowisku wykonawczym

  1. Uruchom aplikację z Xcode.
  2. Na pasku debugowania kliknij przycisk „Symuluj lokalizację”.
  3. Wybierz lokalizację z menu.

Symuluj lokalizację - debuguj

Łączenie Framework CoreLocation

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

Lokalizacja podczas używania Okno dialogowe użytkowania

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.

wprowadź opis zdjęcia tutaj


Zawsze uzyskiwanie pozwolenia na usługi lokalizacyjne

wprowadź opis zdjęcia tutaj

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.

wprowadź opis zdjęcia tutaj

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 .

Tryby tła

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow