CLLocationManager
CLLocationManager
класс является центральной точкой для конфигурирования поставки расположения - и связанные с заголовком события к Вашему приложению. Вы используете экземпляр этого класса для установления параметров, определяющих, когда расположение и возглавляющие события должны быть поставлены и запустить и остановить фактическую поставку тех событий. Можно также использовать менеджера расположения объект получить новое расположение и возглавляющие данные.
Менеджер расположения объект предоставляет поддержку для следующих связанных с расположением действий:
Отслеживание больших или маленьких изменений в текущем расположении пользователя с конфигурируемой степенью точности.
Создание отчетов о возглавляющих изменениях от встроенного компаса. (только iOS)
Контроль отличных областей интереса и генерация событий расположения, когда пользователь вводит или оставляет те области.
Задержка поставки обновлений информации о местоположении, в то время как приложение в фоновом режиме. (iOS 6 и позже только)
Создание отчетов о диапазоне к соседним маркерам.
Сконфигурировать и использовать a CLLocationManager
объект поставить события:
Всегда запрашивайте авторизацию использовать службы определения местоположения и проверку, чтобы видеть, доступны ли желаемые службы, как описано в Выяснении у Разрешения Использовать Службы определения местоположения.
Создайте экземпляр
CLLocationManager
класс и хранилище сильная ссылка к нему где-нибудь в Вашем приложении.При хранении сильной ссылки менеджеру расположения, объект требуется, пока все задачи, включающие тот объект, не завершены. Поскольку большая часть менеджера расположения, которого задачи выполняют асинхронно, храня Вашего менеджера расположения в локальной переменной, недостаточна.
Присвойте пользовательский объект
delegate
свойство. Этот объект должен соответствоватьCLLocationManagerDelegate
протокол.Сконфигурируйте любые дополнительные свойства, относящиеся к желаемой службе.
Вызовите надлежащий метод запуска для начала поставки событий.
Все расположение - и связанные с заголовком обновления поставлено связанному объекту делегата, который является пользовательским объектом, который Вы обеспечиваете. Для получения информации о методах делегата Вы используете, чтобы получить события, видеть Ссылку на протокол CLLocationManagerDelegate.
Запрос разрешения использовать службы определения местоположения
Использование служб определения местоположения требует авторизации пользователя. Кроме того, некоторые службы определения местоположения требуют присутствия определенных аппаратных средств на данном устройстве. Например, заголовок информации доступен только на устройствах, содержащих аппаратный компас. До использования служб определения местоположения Ваше приложение должно запросить авторизацию от пользователя использовать те службы, и это должно проверить наличие целевых служб. Типичная последовательность для использования служб определения местоположения следующие:
Вызовите
authorizationStatus
метод класса получить текущее состояние авторизации для Вашего приложения.Если состояние авторизации
kCLAuthorizationStatusRestricted
илиkCLAuthorizationStatusDenied
, Вашему приложению не разрешают использовать службы определения местоположения, и необходимо прервать попытку использовать их.Создайте Ваш
CLLocationManager
возразите и присвойте делегата в нем.Сохраните сильную ссылку своему менеджеру расположения где-нибудь в Вашем приложении.
В iOS, если состояние авторизации было
kCLAuthorizationStatusNotDetermined
, вызовитеrequestWhenInUseAuthorization
илиrequestAlwaysAuthorization
метод для запроса надлежащего типа авторизации от пользователя.В зависимости от служб Вы нуждаетесь, вызываете один или больше следующих методов:
При использовании стандартной службы определения местоположения вызовите
locationServicesEnabled
метод.При использовании значительной службы изменения расположения вызовите
significantLocationChangeMonitoringAvailable
метод.При использовании возглавляющей информации вызовите
headingAvailable
метод.Если Вы контролируете географический или области маркера, вызовите
isMonitoringAvailableForClass:
метод.При выполнении расположения на маркерах Bluetooth вызовите
isRangingAvailable
Безопасно запустить службы определения местоположения, прежде чем будет определено состояние авторизации Вашего приложения. Несмотря на то, что можно запустить службы определения местоположения, те службы не поставляют данных до изменений состояния авторизации в kCLAuthorizationStatusAuthorizedAlways
или kCLAuthorizationStatusAuthorizedWhenInUse
. Быть уведомленным, когда состояние авторизации изменяется, реализация locationManager:didChangeAuthorizationStatus:
метод в Вашем менеджере расположения делегат.
Для служб Вы используете, конфигурируете любые свойства, связанные с той службой точно. Базовое Расположение управляет питанием настойчиво путем выключения аппаратных средств, когда это не необходимо. Например, установка желаемой точности для событий расположения к одному километру дает менеджеру расположения гибкость, чтобы выключить аппаратные средства GPS и положиться исключительно на WiFi или радио ячейки, которые могут привести к значительной экономии электроэнергии.
Получение текущего расположения пользователя
Существует две опции для конфигурирования связанных с расположением служб:
Используйте стандартную службу определения местоположения, позволяющую Вам указывать желаемую точность данных расположения и получать обновления, когда изменяется расположение.
Используйте значительную службу изменения расположения, обеспечивающую более ограниченный набор отслеживания опций, но предлагающую значительную экономию электроэнергии по стандартным службам определения местоположения. В iOS эта служба может также запустить Ваше приложение по мере необходимости для поставки обновлений информации о местоположении.
Стандартная служба определения местоположения является самой подходящей для приложений, поставляющих связанную с расположением информацию непосредственно пользователю, но это может использоваться другими типами приложений также. Для запуска службы сконфигурируйте desiredAccuracy
и distanceFilter
свойства менеджера расположения и затем вызывают startUpdatingLocation
метод. Вы никогда не должны указывать значение точности, больше, чем, в чем Вы нуждаетесь. Базовое Расположение использует значение точности, которое Вы указываете для управления питанием лучше. Более высокая степень точности требует более точных аппаратных средств как GPS, использующий больше питания.
Значительная служба изменения расположения лучше подходит для приложений, хотящих получить начальное расположение пользователя и затем только, чтобы хотеть знать, когда изменяется то расположение. Эта служба требует присутствия сотовых аппаратных средств и поставляет события менее часто, чем стандартные службы определения местоположения. Для запуска значительной службы изменения расположения вызовите startMonitoringSignificantLocationChanges
метод.
Независимо от которой службы определения местоположения Вы используете, о данных расположения сообщают Вашему приложению через менеджера расположения, связал объект делегата. Поскольку может потребоваться несколько секунд для возврата начального расположения, менеджер расположения обычно поставляет ранее кэшируемые данные расположения сразу и затем поставляет более актуальные данные расположения, поскольку это становится доступным. Поэтому это всегда - хорошая идея проверить метку времени любого объекта расположения прежде, чем принять любые меры. Если обе службы определения местоположения включены одновременно, они поставляют события с помощью того же набора методов делегата.
Когда приложение в фоновом режиме, в iOS 6 и позже, можно задержать поставку данных расположения. Рекомендуется использовать эту функцию в ситуациях, где приложение могло обработать данные позже без любых проблем. Например, приложение, отслеживающее расположение пользователя на походном маршруте, могло задержать обновления, пока пользователь не увеличивает определенное расстояние, и затем обработайте точки одновременно. Задержка обновлений помогает сэкономить электроэнергию, позволяя Вашему приложению остаться спящей в течение более длительных промежутков времени.
Используя области для контроля граничных пересечений
Можно использовать контролирующую область службу, которая будет уведомлена, когда пользователь пересекает основанную на области границу. Контроль области применяет обоих к географическим областям (представленный CLCircularRegion
класс) и указывать областям путь (представленный CLBeaconRegion
класс). Вы область, контролирующая для обнаружения граничные пересечения указанной области и Вы используете те граничные пересечения для выполнения связанных задач. Например, после приближения работники химчистки, приложение могло уведомить пользователя для взятия любой одежды, которая была понижена и теперь готова.
Для запуска контроля области сконфигурируйте надлежащий объект области и передайте его startMonitoringForRegion:
метод Вашего менеджера расположения. В iOS зарегистрированные области сохраняются между запусками Вашего приложения. Если граничное пересечение области происходит, в то время как Ваше приложение для iOS не работает, система автоматически будит его (или повторно запускает его), в фоновом режиме так, чтобы это могло обработать событие. В этом случае словарь опций передал application:didFinishLaunchingWithOptions:
метод Вашего делегата приложения содержит ключ UIApplicationLaunchOptionsLocationKey
указать, что Ваше приложение было запущено из-за связанного с расположением события. Во время процесса перезапуска необходимо воссоздать менеджера расположения объект и присвоить делегата, способного к обработке связанных с областью событий. После того, как Вы делаете это, система поставляет уведомление области, для которого было запущено Ваше приложение. Все области, которые Вы сконфигурировали ранее, сделаны доступными в monitoredRegions
свойство любого менеджера расположения возражает, что Вы создаете.
В OS X контроль области работает только, в то время как приложение работает (или на переднем плане или на фоне), и система пользователя бодрствует. Система не запускает приложения для поставки связанных с областью уведомлений. Точно так же, если пользователь помещает компьютер для сна, система не поставляет контрольные уведомления области приложению. Если пользователь будит компьютер в контролируемой области, система действительно поставляет уведомления области Вашему приложению, если это работает. Однако, если компьютер вводит и выходит из области прежде чем быть разбуженным, никакое уведомление не поставлено.
Контрольная служба области работает независимо от любых служб определения местоположения в использовании Вашим приложением, и можно использовать его в сочетании с любой из других служб. Контроль области не поддерживается на всех устройствах. Используйте regionMonitoringAvailable
метод класса определить, может ли использоваться контроль области.
Определение близости к маркерам
Можно использовать службу расположения маркера для определения приблизительного расстояния до устройств та поддержка iBeacon технология. Расположение маркера включает прислушивание к устройствам, широковещательно передающим их присутствие по Bluetooth LE. Когда Вы начинаете располагаться, Вы получаете информацию об идентифицировании каждого маркера, который находится в диапазоне, включая информацию о том, является ли тот маркер соседним или более далеким. Обновления тогда поставлены каждый раз, когда изменяется состояние маркера.
Для запуска расположения маркера создайте a CLBeaconRegion
объект, идентифицирующий маркеры, Вы хотите и передаете тот объект startRangingBeaconsInRegion:
метод. Поскольку менеджер расположения обнаруживает маркеры, это поставляет ту информацию своему делегату locationManager:didRangeBeacons:inRegion:
метод. В области, где много маркеров активны и перемещается пользователь, обновления могут часто поставляться. Для сохранения времени работы от батареи не располагайтесь для маркеров все время. Рекомендуемая практика должна использовать контрольную службу области, чтобы обнаружить присутствие маркеров сначала и начать располагаться только после обнаружения одного или более маркеров. И, конечно, необходимо прекратить располагаться, как только у Вас есть информация, Вам нужно или когда Вы перемещаетесь из диапазона Ваших маркеров.
Configuring Heading-Related Services
В iOS можно использовать службу заголовка для получения связанной с компасом информации об устройствах с надлежащими аппаратными средствами. Приложения, реализующие опции навигации или ориентации в пространстве, могут использовать информацию о компасе для определения, к какому пути пользователь обращенным. Служба заголовка не поддерживается в OS X.
Для начала поставки связанных с заголовком событий присвойтесь, делегат в менеджере расположения возражают и вызывают startUpdatingHeading
метод. Если обновления информации о местоположении также включены, менеджер расположения возвращает и заголовок истины и магнитные значения заголовка. Если обновления информации о местоположении не включены, менеджер расположения возвращает только магнитное значение заголовка.
Базовое Расположение поставляет возглавляющие данные Вашему приложению, в то время как это находится на переднем плане. Когда Ваше приложение перемещается в фон, остановки поставки события, если Вашему приложению не включили фоновый режим обновлений информации о местоположении, и стандартная служба определения местоположения работает. Вы можете включить фоновые режимы из вкладки Capabilities Вашего проекта XCode, но должны сделать так, только если можно использовать возглавляющие данные практически в то время как в фоновом режиме.
Получение посещаемых расположений
В iOS служба посещений обеспечивает альтернативу значительной службе изменения расположения для приложений, для которых нужна информация о расположении об интересных местах, которые посетил пользователь. Например, если пользователь находится в одном расположении в течение длительного периода времени, служба могла бы генерировать событие, когда пользователь достигает того расположения и другого, когда пользователь покидает то расположение. Служба предназначается для приложений, которые могли бы уже использовать значительную службу изменения расположения и хотеть еще более низкое питание способ сделать так. Вы не использовали бы эту службу для создания приложений навигации или приложений, полагающихся на регулярные обновления информации о местоположении.
Для начала поставки связанных с посещением событий присвойтесь, делегат в менеджере расположения возражают и вызывают startMonitoringVisits
метод. Поскольку менеджер расположения генерирует события посещения, это поставляет ту информацию своему делегату locationManager:didVisit:
метод. Данные о событии, поставленные Вашему делегату, включают только информацию, произошедшую после запуска поставки событий. Другими словами, если Вы запустите поставку событий после того, как пользователь достиг интересного расположения, событие, поставленное системой, когда пользователь отбыл, то то расположение не отразит время фактического поступления. Если система завершает Ваше приложение, эта служба повторно запускает его, когда новые события посещения готовы быть поставленными.
Используя службы определения местоположения в фоновом режиме
Большинство служб определения местоположения предназначается, чтобы использоваться, в то время как Ваше приложение находится на переднем плане, но некоторые могут также работать в фоновом режиме. В некоторых случаях события расположения могут даже заставить Ваше приложение быть повторно запущенным для обработки события. Для выполнения большинства служб определения местоположения в фоновом режиме необходимо включить фоновый режим обновлений информации о местоположении на вкладке Capabilities проекта XCode. Для служб, запускающих Ваше приложение, необходимо запросить (и предоставлены), «Всегда» авторизация от пользователя.
В то время как приложение работает на переднем плане, стандартная служба определения местоположения обычно поставляет события. Когда Ваше приложение в фоновом режиме, эта служба поставляет события только, когда фоновый режим обновлений информации о местоположении включен для приложения. Эта служба не повторно запускает завершенные приложения для iOS.
В то время как приложение работает на переднем плане или фоне, значительная служба изменения расположения обычно поставляет события. Для завершенного приложения для iOS эта служба повторно запускает приложение для поставки событий. Использование этой службы «всегда» требует авторизации от пользователя.
В то время как приложение работает на переднем плане или фоне, контрольная служба области обычно поставляет события. (Можно использовать эту службу и для географических областей и для областей маркера.) Для завершенного приложения для iOS эта служба повторно запускает приложение для поставки событий. Использование этой службы «всегда» требует авторизации от пользователя.
В то время как приложение работает на переднем плане, расположение маркера обычно поставляет события. Когда Ваше приложение в фоновом режиме, эта служба поставляет события только, когда фоновый режим обновлений информации о местоположении включен для приложения, и стандартная служба определения местоположения работает. (Если область маркера
notifyEntryStateOnDisplay
свойствоYES
true
, пробуждение устройства заставляет приложение располагаться для маркеров в течение нескольких секунд в фоновом режиме.) Эта служба не повторно запускает завершенные приложения для iOS; однако, Вы можете быть повторно запущены путем контроля областей маркера с помощью контрольной службы области.В то время как приложение для iOS работает на переднем плане, служба заголовка обычно поставляет события. Когда Ваше приложение в фоновом режиме, эта служба поставляет события только, когда фоновый режим обновлений информации о местоположении включен для приложения, и стандартная служба определения местоположения работает. Эта служба не повторно запускает завершенные приложения для iOS.
В то время как приложение для iOS работает на переднем плане, служба посещения обычно поставляет события. Когда Ваше приложение в фоновом режиме, эта служба поставляет события только, когда фоновый режим обновлений информации о местоположении включен для приложения, и стандартная служба определения местоположения работает. Для завершенного приложения для iOS эта служба повторно запускает приложение для поставки событий. Использование этой службы «всегда» требует авторизации от пользователя.
Включение фонового режима обновлений информации о местоположении гарантирует, что приложение продолжает получать события расположения в то время как в фоновом режиме. Когда приложение перемещается в фон, система добавляет индикатор служб определения местоположения к строке состояния, чтобы позволить пользователю знать, что приложение использует службы определения местоположения. Система может все еще завершить приложение в любое время для предъявления претензий в отношении его памяти или других ресурсов.
Для служб, повторно запускающих приложение, система добавляет UIApplicationLaunchOptionsLocationKey
ключ к словарю опций передал делегату приложения во время запуска. Когда этот ключ присутствует, необходимо перезапустить службы определения местоположения приложения сразу же. Словарь опций не включает информацию о самом событии расположения. Необходимо сконфигурировать нового менеджера расположения объект и делегировать и запустить службы определения местоположения снова для получения любых незаконченных событий. В iOS 7.1 и позже, службы, заставляющие приложение быть повторно запущенным, делают так даже после пользовательских выходов силы приложение. В предыдущих версиях iOS выход силы приложение препятствовало тому, чтобы было повторно запущено приложение.
Если Ваше приложение ничего не должно делать с событиями расположения сразу же, рассмотрите обновления информации о местоположении задержки с помощью allowDeferredLocationUpdatesUntilTraveled:timeout:
метод. Все еще поставляя событиям расположения для Вашего приложения нужно, задержка поставки обновлений информации о местоположении упрощает для Базового Расположения сохранять время работы от батареи.
Оператор импорта
Swift
import CoreLocation
Objective C
@import CoreLocation;
Доступность
Доступный в OS X v10.6 и позже.
-
Возвращает состояние авторизации приложения для использования служб определения местоположения.
Объявление
Swift
class func authorizationStatus() -> CLAuthorizationStatus
Objective C
+ (CLAuthorizationStatus)authorizationStatus
Возвращаемое значение
Значение, указывающее, разрешено ли приложение использовать службы определения местоположения.
Обсуждение
Состоянием авторизации данного приложения управляет система и определяют несколько факторов. Приложения должны быть явно разрешены использовать службы определения местоположения пользователем, и службы определения местоположения должны самостоятельно в настоящее время включаться для системы. Когда Ваше приложение сначала пытается использовать службы определения местоположения, запрос на авторизацию пользователя выведен на экран автоматически.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.7 и позже.
-
Возвращает булево значение, указывающее, включены ли службы определения местоположения на устройстве.
Объявление
Swift
class func locationServicesEnabled() -> Bool
Objective C
+ (BOOL)locationServicesEnabled
Возвращаемое значение
YES
true
если включены службы определения местоположения;NO
false
если они не.Обсуждение
Пользователь может включить или отключить службы определения местоположения из приложения Настроек путем переключения переключателя Location Services в целом.
Необходимо проверить возвращаемое значение этого метода прежде, чем запустить обновления информации о местоположении, чтобы определить, включили ли пользователю службы определения местоположения для текущего устройства. Службы определения местоположения предлагают пользователям в первый раз, когда они пытаются использовать связанную с расположением информацию в приложении, но не запрашивает последующие попытки. Если пользователь отклоняет использование служб определения местоположения, и Вы пытаетесь запустить обновления информации о местоположении так или иначе, менеджер расположения сообщает об ошибке ее делегату.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.7 и позже.
-
Возвращает булево значение, указывающее, поддерживает ли устройство задержанные обновления информации о местоположении.
Объявление
Swift
class func deferredLocationUpdatesAvailable() -> Bool
Objective C
+ (BOOL)deferredLocationUpdatesAvailable
Возвращаемое значение
YES
true
если устройство поддерживает задержанные обновления информации о местоположении илиNO
false
если это не делает.Обсуждение
Задержанные обновления информации о местоположении являются способом для менеджера расположения часто избегать будить фоновое приложение для поставки изменений расположения. Обычно, когда приложение хочет обновления информации о местоположении в фоновом режиме, приложение должно быть разбужено каждый раз, когда поступает новое событие. Пробуждение приложения использует питание, которое в некоторых ситуациях могло бы быть потрачено впустую, если приложение ничего не может сделать с информацией о расположении кроме журнала это и возвратиться для сна так или иначе. Когда Ваше приложение может сделать что-то полезное с данными и затем обработать обновления одновременно, задержка обновлений информации о местоположении предоставляет Вам возможность ожидать до времени.
Задержанные обновления информации о местоположении требуют присутствия аппаратных средств GPS и не могут поддерживаться на всех устройствах на iOS.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.9 и позже.
-
Возвращает булево значение, указывающее, доступно ли значительное отслеживание изменений расположения.
Объявление
Swift
class func significantLocationChangeMonitoringAvailable() -> Bool
Objective C
+ (BOOL)significantLocationChangeMonitoringAvailable
Возвращаемое значение
YES
true
если контроль изменения расположения доступен;NO
false
если это не.Обсуждение
Этот метод указывает, в состоянии ли устройство сообщить, что обновления на основе значительного расположения изменяются только. Эта возможность обеспечивает огромную экономию электроэнергии для приложений, которые хотят отследить приблизительное расположение пользователя и не нужны в очень точной информации о положении.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.7 и позже.
-
Возвращает булево значение, указывающее, в состоянии ли менеджер расположения генерировать связанные с заголовком события.
Объявление
Swift
class func headingAvailable() -> Bool
Objective C
+ (BOOL)headingAvailable
Возвращаемое значение
YES
true
если заголовок данных доступен;NO
false
если это не.Обсуждение
Заголовок данных может не быть доступным на всех основанных на iOS устройствах. Необходимо проверить значение, возвращенное этим методом прежде, чем попросить, чтобы менеджер расположения поставил связанные с заголовком события.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.7 и позже.
-
Возвращает булевскую переменную, указывающую, поддерживает ли устройство контроль области с помощью указанного класса.
Объявление
Swift
class func isMonitoringAvailableForClass(_
regionClass
: AnyClass!) -> BoolObjective C
+ (BOOL)isMonitoringAvailableForClass:(Class)
regionClass
Параметры
regionClass
Контрольный класс области от платформы Набора Карты. Этот класс должен быть убыванием от
CLRegion
класс.Возвращаемое значение
YES
true
если устройство способно к контролирующим областям с помощью указанного класса илиNO
false
если это не.Обсуждение
Доступность контрольной поддержки области зависит от аппаратного настоящего на устройстве. Этот метод не принимает во внимание доступность служб определения местоположения или факта, что пользователь, возможно, отключил их для приложения или системы; необходимо определить состояние авторизации приложения отдельно.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.10 и позже.
См. также
-
Объект делегата получить события обновления.
Объявление
Swift
unowned(unsafe) var delegate: CLLocationManagerDelegate!
Objective C
@property(assign, nonatomic) id< CLLocationManagerDelegate > delegate
Специальные замечания
В iOS это свойство объявляется как
nonatomic
. В OS X это объявляется какatomic
.Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.6 и позже.
-
Запускает генерацию обновлений, сообщающих о текущем расположении пользователя.
Объявление
Swift
func startUpdatingLocation()
Objective C
- (void)startUpdatingLocation
Обсуждение
Этот метод сразу возвращается. Вызов этих причин метода, которые фиксирует менеджер расположения для получения начального расположения (который может занять несколько секунд) и уведомь делегата путем вызова
locationManager:didUpdateLocations:
метод. (В iOS 5 и ранее, вызовы диспетчера расположенияlocationManager:didUpdateToLocation:fromLocation:
метод вместо этого.) После этого получатель генерирует события обновления прежде всего когда значение вdistanceFilter
свойство превышено. Обновления могут быть поставлены в других ситуациях все же. Например, если аппаратные средства собирают более точное чтение расположения, получатель может отправить другое уведомление.Вызов этого метода несколько раз по очереди автоматически не приводит к новым сгенерированным событиям. Вызов
stopUpdatingLocation
промежуточный, однако, действительно заставляет новое начальное событие быть отправленным в следующий раз, когда Вы вызываете этот метод.Если Вы запускаете эту службу, и Ваше приложение приостановлено, система останавливает поставку событий, пока Ваше приложение не начинает работать снова (или на переднем плане или на фоне). Если Ваше приложение завершается, поставка новых событий расположения останавливается в целом. Поэтому, если Ваше приложение должно получить события расположения, в то время как в фоновом режиме, оно должно включать
UIBackgroundModes
ключ (сlocation
значение) вInfo.plist
файл.В дополнение к Вашему объекту делегата реализация
locationManager:didUpdateLocations:
метод, это должно также реализоватьlocationManager:didFailWithError:
метод для ответа на потенциальные ошибки.Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.6 и позже.
-
Останавливает генерацию обновлений информации о местоположении.
Объявление
Swift
func stopUpdatingLocation()
Objective C
- (void)stopUpdatingLocation
Обсуждение
Вызовите этот метод каждый раз, когда Ваш код больше не должен получать связанные с расположением события. Отключение поставки события дает получателю опцию отключения надлежащих аппаратных средств (и таким образом экономия электроэнергии), когда никаким клиентам не нужны данные расположения. Можно всегда перезапускать генерацию обновлений информации о местоположении путем вызова
startUpdatingLocation
метод снова.Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.6 и позже.
См. также
-
distanceFilter distanceFilter
СвойствоМинимальное расстояние (измеренный в метрах) устройство должно переместиться горизонтально, прежде чем событие обновления сгенерировано.
Объявление
Swift
var distanceFilter: CLLocationDistance
Objective C
@property(assign, nonatomic) CLLocationDistance distanceFilter
Обсуждение
Это расстояние измеряется относительно ранее поставленного расположения. Используйте значение
kCLDistanceFilterNone
быть уведомленным относительно всех перемещений. Значение по умолчанию этого свойстваkCLDistanceFilterNone
.Это свойство используется только в сочетании со стандартными службами определения местоположения и не используется при наблюдении значительных изменений расположения.
Специальные замечания
В iOS это свойство объявляется как
nonatomic
. В OS X это объявляется какatomic
.Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.6 и позже.
-
desiredAccuracy desiredAccuracy
СвойствоТочность данных расположения.
Объявление
Swift
var desiredAccuracy: CLLocationAccuracy
Objective C
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy
Обсуждение
Получатель прилагает все усилия для достижения требуемой точности; однако, фактическая точность не гарантируется.
Необходимо присвоить значение этому свойству, которое подходяще для сценария использования. Например, при необходимости в текущем расположении только в километре необходимо указать
kCLLocationAccuracyKilometer
и нетkCLLocationAccuracyBestForNavigation
. Определение расположения с большей точностью требует большего количества времени и большего количества питания.Запрашивая высокоточные данные расположения, начальное событие, поставленное службой определения местоположения, может не иметь точности, которую Вы запросили. Служба определения местоположения поставляет начальное событие как можно быстрее. Это тогда продолжает определять расположение с точностью, Вы запросили и поставляете дополнительные события, по мере необходимости, когда те данные доступны.
Значение по умолчанию этого свойства
kCLLocationAccuracyBest
.Это свойство используется только в сочетании со стандартными службами определения местоположения и не используется при наблюдении значительных изменений расположения.
Специальные замечания
В iOS это свойство объявляется как
nonatomic
. В OS X это объявляется какatomic
.Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.6 и позже.
-
Запускает генерацию обновлений на основе значительных изменений расположения.
Объявление
Swift
func startMonitoringSignificantLocationChanges()
Objective C
- (void)startMonitoringSignificantLocationChanges
Обсуждение
Этот метод инициирует поставку событий расположения асинхронно, возвращаясь после вызова его. События расположения поставлены Вашему делегату
locationManager:didUpdateLocations:
метод. Первое событие, которое будет поставлено, обычно является последний раз кэшируемым событием расположения (если таковые имеются), но может быть более новым событием при некоторых обстоятельствах. Получение текущей фиксации расположения может занять несколько дополнительных секунд, так, несомненно, сможет проверить метки времени на событиях расположения в Вашем методе делегата.После возврата текущего расположения фиксируют, получатель генерирует события обновления только, когда обнаруживается существенное изменение в расположении пользователя. Это не полагается на значение в
distanceFilter
свойство для генерации событий. Вызов этого метода несколько раз по очереди автоматически не приводит к новым сгенерированным событиям. ВызовstopMonitoringSignificantLocationChanges
промежуточный, однако, действительно заставляет новое начальное событие быть отправленным в следующий раз, когда Вы вызываете этот метод.Если Вы запускаете эту службу, и Ваше приложение впоследствии завершается, система автоматически повторно запускает приложение в фон, если поступает новое событие. В таком случае словарь опций передал
application:willFinishLaunchingWithOptions:
иapplication:didFinishLaunchingWithOptions:
методы Вашего делегата приложения содержат ключUIApplicationLaunchOptionsLocationKey
указать, что Ваше приложение было запущено из-за события расположения. На перезапуск необходимо все еще сконфигурировать менеджера расположения объект и вызвать этот метод, чтобы продолжать получать события расположения. При перезапуске служб определения местоположения текущее событие сразу поставлено делегату. Кроме того,location
свойство Вашего менеджера расположения, объект заполняется с новым объектом расположения даже перед запуском служб определения местоположения.В дополнение к Вашему объекту делегата реализация
locationManager:didUpdateLocations:
метод, это должно также реализоватьlocationManager:didFailWithError:
метод для ответа на потенциальные ошибки.Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.7 и позже.
-
Останавливает поставку событий расположения на основе значительных изменений расположения.
Объявление
Swift
func stopMonitoringSignificantLocationChanges()
Objective C
- (void)stopMonitoringSignificantLocationChanges
Обсуждение
Используйте этот метод для остановки поставки событий расположения, запущенной с помощью
startMonitoringSignificantLocationChanges
метод.Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.7 и позже.
-
Начинает контролировать указанную область.
Объявление
Swift
func startMonitoringForRegion(_
region
: CLRegion!)Objective C
- (void)startMonitoringForRegion:(CLRegion *)
region
Параметры
region
Объект области, определяющий границу для контроля. Этот параметр не должен быть
nil
.Обсуждение
Необходимо вызвать этот метод один раз для каждой области, которую Вы хотите контролировать. Если существующая область с тем же идентификатором уже контролируется приложением, старая область заменяется новой. Области Вы добавляете использование этого метода, совместно используются всем менеджером расположения объекты в Вашем приложении и сохранены в
monitoredRegions
свойство.События области поставлены
locationManager:didEnterRegion:
иlocationManager:didExitRegion:
методы Вашего делегата. Если существует ошибка, вызовы диспетчера расположенияlocationManager:monitoringDidFailForRegion:withError:
метод Вашего делегата вместо этого.Приложение может зарегистрировать до 20 областей за один раз. Чтобы сообщить, что область изменяется своевременно, контрольная служба области требует сетевого соединения.
В iOS 6, областях с радиусом между 1-и 400-метровой работой лучше над iPhone 4S или более поздними устройствами. (В iOS 5, областях с радиусом между 1-и 150-метровой работой лучше над iPhone 4S и более поздними устройствами.) На этих устройствах приложение может ожидать получать надлежащую вводимую область, или область вышла из уведомления в течение 3 - 5 минут в среднем, если не раньше.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.8 и позже.
См. также
-
Остановки, контролирующие указанную область.
Объявление
Swift
func stopMonitoringForRegion(_
region
: CLRegion!)Objective C
- (void)stopMonitoringForRegion:(CLRegion *)
region
Параметры
region
Объект области, в настоящее время контролируемый. Этот параметр не должен быть
nil
.Обсуждение
Если указанный объект области в настоящее время не контролируется, этот метод не имеет никакого эффекта.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.8 и позже.
См. также
-
monitoredRegions monitoredRegions
СвойствоНабор совместно используемых областей, контролируемых всем менеджером расположения объекты. (только для чтения)
Объявление
Swift
@NSCopying var monitoredRegions: NSSet! { get }
Objective C
@property(readonly, nonatomic, copy) NSSet *monitoredRegions
Обсуждение
Вы не можете добавить области к этому свойству непосредственно. Вместо этого необходимо зарегистрировать области путем вызова
startMonitoringForRegion:
метод. Области в этом свойстве совместно используются всеми экземплярамиCLLocationManager
класс в Вашем приложении.Объекты в этом наборе могут не обязательно быть теми же объектами, которые Вы указали в регистрационное время. Только сами данные области сохраняются системой. Поэтому единственный способ однозначно определить зарегистрированную область использует
identifier
свойство.Менеджер расположения сохраняет данные области между запусками Вашего приложения. Если Ваше приложение завершается и затем повторно запускается, содержание этого свойства повторно заполняется с объектами области, содержащими ранее зарегистрированные данные.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.8 и позже.
-
Самое большое граничное расстояние, которое может быть присвоено области. (только для чтения)
Объявление
Swift
var maximumRegionMonitoringDistance: CLLocationDistance { get }
Objective C
@property(readonly, nonatomic) CLLocationDistance maximumRegionMonitoringDistance
Обсуждение
Это свойство определяет самое большое граничное расстояние, позволенное от центральной точки области. Попытка контролировать область с расстоянием, больше, чем это значение, заставляет менеджера расположения отправлять a
kCLErrorRegionMonitoringFailure
ошибка делегату.Если контроль области недоступен или не поддерживаемый, значение в этом свойстве
-1
.Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.8 и позже.
-
Получает состояние области асинхронно.
Объявление
Swift
func requestStateForRegion(_
region
: CLRegion!)Objective C
- (void)requestStateForRegion:(CLRegion *)
region
Параметры
region
Область, состояние которой Вы хотите знать. Этот объект должен быть экземпляром одного из стандартных подклассов области, предоставленных Набором Карты. Вы не можете использовать этот метод для определения состояния пользовательских областей, которые Вы определяете сами.
Обсуждение
Этот метод выполняет запрос асинхронно и поставляет результаты делегату менеджера расположения. Необходимо реализовать
locationManager:didDetermineState:forRegion:
метод в делегате для получения результатов.Если
region
параметр содержит неизвестный тип объекта области, этот метод ничего не делает.Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.10 и позже.
-
расположение расположение
СвойствоПоследний раз полученное пользовательское расположение. (только для чтения)
Объявление
Swift
@NSCopying var location: CLLocation! { get }
Objective C
@property(readonly, nonatomic, copy) CLLocation *location
Обсуждение
Значение этого свойства
nil
если никогда не получались никакие данные расположения.В iOS 4.0 и позже, это свойство может содержать более свежий объект расположения во время запуска. В частности, если значительные обновления информации о местоположении работают, и Ваше приложение завершается, это свойство обновляется с новыми данными расположения, когда Ваше приложение повторно запускается (и Вы создаете нового менеджера расположения объект). Эти данные расположения могут быть более свежими, чем последнее событие расположения, обработанное Вашим приложением.
Это всегда - хорошая идея проверить метку времени расположения, сохраненного в этом свойстве. Если получатель в настоящее время собирает данные расположения, но минимальный фильтр расстояния является большим, возвращенное расположение могло бы быть относительно старым. Если это, можно остановить получатель и запустить его снова для принуждения обновления.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.6 и позже.
См. также
-
Булево значение, указывающее, включены ли службы определения местоположения на устройстве. (только для чтения)
Оператор осуждения
Используйте
locationServicesEnabled
метод класса вместо этого.Объявление
Objective C
@property(readonly) BOOL locationServicesEnabled
Обсуждение
В iOS пользователь может включить или отключить службы определения местоположения с помощью средств управления в Настройках> Службы определения местоположения. В OS X пользователь может включить или отключить службы определения местоположения от системного предпочтения Безопасности и Конфиденциальности.
Необходимо проверить это свойство прежде, чем запустить обновления информации о местоположении, чтобы определить, включили ли пользователю службы определения местоположения для текущего устройства. Если это свойство содержит значение
NO
false
и Вы запускаете обновления информации о местоположении так или иначе, Базовая платформа Расположения предлагает пользователю с предупреждением подтверждения выяснение, должны ли быть повторно включены службы определения местоположения.Специальные замечания
В iOS это свойство объявляется как
nonatomic
. В OS X это объявляется какatomic
.Оператор импорта
Objective C
@import CoreLocation;
Доступность
Доступный в OS X v10.6 через OS X v10.6.
См. также
-
regionMonitoringAvailable () + regionMonitoringAvailable
(OS X v10.10)Возвращает булево значение, указывающее, поддерживается ли контроль области на текущем устройстве.
Оператор осуждения
Использовать
isMonitoringAvailableForClass:
вместо этого.Объявление
Swift
class func regionMonitoringAvailable() -> Bool
Objective C
+ (BOOL)regionMonitoringAvailable
Возвращаемое значение
YES
true
если контроль области доступен;NO
false
если это не.Обсуждение
Поддержка контроля области может не быть доступной на всех устройствах и моделях. Необходимо проверить значение этого свойства прежде, чем попытаться установить любые области или инициировать контроль области.
Даже если контрольная поддержка области присутствует на устройстве, это может все еще быть недоступно, потому что пользователь отключил его для текущего приложения или для всех приложений.
Специальные замечания
Этот класс осуждается в iOS 7 и позже но все еще поддерживается в OS X.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.8 и позже.
Осуждаемый в OS X v10.10.
См. также
-
regionMonitoringEnabled () + regionMonitoringEnabled
(OS X v10.10)Возвращает булево значение, указывающее, включается ли в настоящее время контроль области.
Оператор осуждения
Использовать
isMonitoringAvailableForClass:
иauthorizationStatus
вместо этого.Объявление
Swift
class func regionMonitoringEnabled() -> Bool
Objective C
+ (BOOL)regionMonitoringEnabled
Возвращаемое значение
YES
true
если контроль области доступен и в настоящее время включается;NO
false
если это недоступно или не включенное.Обсуждение
В iOS пользователь может включить или отключить службы определения местоположения (включая контроль области) использование средств управления в Настройках> Службы определения местоположения.
Необходимо проверить возвращаемое значение этого метода перед стартовыми контрольными обновлениями области, чтобы определить, позволяет ли пользователь в настоящее время службам определения местоположения использоваться вообще. Если возвращается этот метод
NO
false
и Вы запускаете контрольные обновления области так или иначе, Базовая платформа Расположения предлагает пользователю подтверждать выяснение, должны ли быть повторно включены службы определения местоположения.Этот метод не проверяет, чтобы видеть, поддерживаются ли контрольные возможности области фактически устройством. Поэтому необходимо также проверить возвращаемое значение
regionMonitoringAvailable
метод класса прежде, чем попытаться запустить контрольные службы области.Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.8 и позже.
Осуждаемый в OS X v10.10.
См. также
-
startMonitoringForRegion:desiredAccuracy: - startMonitoringForRegion:desiredAccuracy:
Доступный в OS X v10.7 через OS X v10.7Начинает контролировать указанную область для граничных пересечений.
Оператор осуждения
Использовать
startMonitoringForRegion:
вместо этого.Объявление
Objective C
- (void)startMonitoringForRegion:(CLRegion *)
region
desiredAccuracy:(CLLocationAccuracy)accuracy
Параметры
region
Объект области, определяющий границу для контроля. Этот параметр не должен быть
nil
.accuracy
Расстояние мимо границы (измеренный в метрах), в котором можно генерировать уведомления. Когда пользователь близко к краю границы, можно использовать это значение для предотвращения поставки многократных уведомлений.
Обсуждение
Необходимо вызвать этот метод отдельно для каждой области, которую Вы хотите контролировать. Если существующая область с тем же идентификатором уже контролируется приложением, старая область заменяется новой. Области Вы добавляете использование этого метода, совместно используются всем менеджером расположения объекты в Вашем приложении и сохранены в
monitoredRegions
свойство.Если Вы начинаете контролировать область, и Ваше приложение впоследствии завершается, система автоматически повторно запускает его в фон, если пересечена граница области. В таком случае словарь опций передал
application:didFinishLaunchingWithOptions:
метод Вашего делегата приложения содержит ключUIApplicationLaunchOptionsLocationKey
указать, что Ваше приложение было запущено из-за связанного с расположением события. Кроме того, создание нового менеджера расположения и присвоение делегата приводят к поставке соответствующих сообщений области. Недавно создаваемый менеджер расположенияlocation
даже если службы определения местоположения не включены, свойство также содержит текущее расположение.События области поставлены
locationManager:didEnterRegion:
иlocationManager:didExitRegion:
методы Вашего делегата. Если существует ошибка, вызовы диспетчера расположенияlocationManager:monitoringDidFailForRegion:withError:
метод Вашего делегата вместо этого.Оператор импорта
Objective C
@import CoreLocation;
Доступность
Доступный в OS X v10.7 через OS X v10.7.
-
Предоставленная приложением строка, описывающая причину использования служб определения местоположения.
Установите строку цели с помощью
NSLocationAlwaysUsageDescription
илиNSLocationWhenInUseUsageDescription
введите приложениеInfo.plist
вместо этого.Обсуждение
Если это свойство не
nil
и система должна попросить согласие пользователя использовать службы определения местоположения, это выводит на экран предоставленную строку. Можно использовать эту строку для объяснения, почему приложение использует службы определения местоположения.Необходимо установить значение этого свойства до запуска любых служб определения местоположения. Поскольку строка в конечном счете выведена на экран пользователю, необходимо всегда загружать ее из файла локализованных строк.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.7 и позже.
-
Эти константы указывают, разрешено ли приложение использовать службы определения местоположения.
Объявление
Swift
enum CLAuthorizationStatus : Int32 { case NotDetermined case Restricted case Denied case Authorized }
Objective C
typedef enum { kCLAuthorizationStatusNotDetermined = 0, kCLAuthorizationStatusRestricted, kCLAuthorizationStatusDenied, kCLAuthorizationStatusAuthorized, } CLAuthorizationStatus;
Константы
-
NotDetermined
kCLAuthorizationStatusNotDetermined
Пользователь еще не сделал выбор относительно того, может ли это приложение использовать службы определения местоположения.
Доступный в OS X v10.7 и позже.
-
Restricted
kCLAuthorizationStatusRestricted
Это приложение не разрешено использовать службы определения местоположения. Пользователь не может изменить состояние этого приложения, возможно вследствие активных ограничений, таких как существующий родительский контроль.
Доступный в OS X v10.7 и позже.
-
Denied
kCLAuthorizationStatusDenied
Пользователь явно отклонил использование служб определения местоположения для этого приложения, или службы определения местоположения в настоящее время отключаются в Настройках.
Доступный в OS X v10.7 и позже.
-
Authorized
kCLAuthorizationStatusAuthorized
Это приложение разрешено использовать службы определения местоположения.
Доступный в OS X v10.7 и позже.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.7 и позже.
-
-
Константы для указания максимальных значений во время задержанных обновлений.
Объявление
Objective C
extern const CLLocationDistance CLLocationDistanceMax; extern const NSTimeInterval CLTimeIntervalMax;
Константы
-
Эти константы указывают тип действия, связанного с обновлениями информации о местоположении.
Объявление
Swift
enum CLActivityType : Int { case Other case AutomotiveNavigation case Fitness case OtherNavigation }
Objective C
enum { CLActivityTypeOther = 1, CLActivityTypeAutomotiveNavigation, CLActivityTypeFitness, CLActivityTypeOtherNavigation, }; typedef NSInteger CLActivityType;
Константы
-
Other
CLActivityTypeOther
Менеджер расположения используется для неизвестного действия.
Доступный в OS X v10.9 и позже.
-
AutomotiveNavigation
CLActivityTypeAutomotiveNavigation
Менеджер расположения используется в частности во время автомобильной навигации для отслеживания изменений расположения в автомобиле. Это действие могло бы заставить обновления информации о местоположении быть приостановленными только, когда механизм не перемещается в течение длительного периода времени.
Доступный в OS X v10.9 и позже.
-
Fitness
CLActivityTypeFitness
Менеджер расположения используется для отслеживания любого связанного с пешеходом действия. Это действие могло бы заставить обновления информации о местоположении быть приостановленными только, когда пользователь не перемещает значительное расстояние в течение времени.
Доступный в OS X v10.9 и позже.
-
OtherNavigation
CLActivityTypeOtherNavigation
Менеджер расположения используется для отслеживания перемещений за другие типы автомобильной навигации, которые не являются связанным автомобилем. Например, Вы использовали бы это для отслеживания навигации судном, поездом или плоскостью. Не используйте этот тип для пешеходного отслеживания навигации. Это действие могло бы заставить обновления информации о местоположении быть приостановленными только, когда механизм не перемещает значительное расстояние в течение времени.
Доступный в OS X v10.9 и позже.
Оператор импорта
Objective C
@import CoreLocation;
Swift
import CoreLocation
Доступность
Доступный в OS X v10.9 и позже.
-