Поиск…


Синтаксис

  1. desiredAccuracy
  2. distanceFilter
  3. requestLocation ()
  4. startUpdatingLocation ()
  5. allowDeferredLocationUpdates (untilTraveled: тайм-аут :)
  6. startMonitoringSignificantLocationChanges ()
  7. allowDeferredLocationUpdates (untilTraveled: тайм-аут :)
  8. authorizedAlways
  9. authorizedWhenInUse
  10. locationManager (_: didChangeAuthorization :)

замечания

Имитировать местоположение в Runtime

  1. Запустите приложение из Xcode.
  2. В панели отладки нажмите кнопку «Имитировать местоположение».
  3. Выберите местоположение из меню.

Имитировать местоположение - отладка

Связывание CoreLocation Framework

Импортируйте модуль CoreLocation в свои классы, которые используют функциональность CoreLocation.

//Swift
import CoreLocation

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

Запросить разрешение на использование служб местоположения

Проверьте статус авторизации приложения с помощью:

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

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

Проверьте статус на следующие константы:

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

Получение разрешения на доступ к местоположению во время работы приложения

Местоположение при использовании диалога использования

viewDidLoad способ - инициализировать диспетчер местоположений как свойство вашего контроллера корневого представления и поместить запрос разрешения в свой viewDidLoad .

Это вызывает контроллер предупреждений, который запрашивает разрешение:

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

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

Добавьте ключ NSLocationWhenInUseUsageDescription в свой Info.plist . Значение будет использоваться в метке message контроллера предупреждения.

введите описание изображения здесь


Получение разрешения на обслуживание

введите описание изображения здесь

Чтобы запросить разрешение на использование служб определения местоположения, даже если приложение неактивно, вместо этого используйте следующий вызов:

//Swift
locationManager.requestAlwaysAuthorization()

//Objective-C
[locationManager requestAlwaysAuthorization];

Затем добавьте ключ NSLocationAlwaysUsageDescription в свой Info.plist . Опять же, значение будет использоваться в метке message контроллера предупреждения.

введите описание изображения здесь

Добавить собственное пользовательское местоположение с помощью файла GPX

Для проверки сервисов определения местоположения нам нужно настоящее устройство, но для целей тестирования мы также можем использовать симулятор и добавить наше собственное местоположение, выполнив следующие шаги:

  • добавьте новый GPX-файл в свой проект.
  • в файле GPX добавьте путевые точки, например
<?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>
  • затем перейдите к продукту -> Схема -> Изменить схему и в RUN укажите местоположение по умолчанию в качестве имени вашего GPX-файла.

Услуги по размещению в фоновом режиме

Чтобы использовать стандартные службы определения местоположения, когда приложение находится в фоновом режиме, сначала необходимо включить Background Modes режим на вкладке «Возможности» целевых настроек и выбрать « Location updates .

Режимы фона

Или добавьте его непосредственно в Info.plist.

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

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

Затем вам нужно настроить CLLocationManager

Цель 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];

стриж

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow