iOS
Расположение ядра
Поиск…
Синтаксис
- desiredAccuracy
- distanceFilter
- requestLocation ()
- startUpdatingLocation ()
- allowDeferredLocationUpdates (untilTraveled: тайм-аут :)
- startMonitoringSignificantLocationChanges ()
- allowDeferredLocationUpdates (untilTraveled: тайм-аут :)
- authorizedAlways
- authorizedWhenInUse
- locationManager (_: didChangeAuthorization :)
замечания
Имитировать местоположение в Runtime
- Запустите приложение из Xcode.
- В панели отладки нажмите кнопку «Имитировать местоположение».
- Выберите местоположение из меню.
Link 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()