CLLocationManager
更新于2018年1月17号
位置管理器对象
用于启动和停止向应用程序传递位置相关的事件的对象。
概述
你可以使用这个类的实例去配置,启动,停止核心定位服务(Core Location services)。位置管理器对象支持下面和位置相关的活动:
- 通过配置精确度来追踪用户当前位置或大或小的变化。
- 通过罗盘报告方向的变化。(仅适用于iOS)
- 监测感兴趣的特别区域,当用户进入或者离开这些区域时产生相应的位置事件。
- 当应用进入后台,延迟发送位置更新。(仅适用于iOS)
- 向附近的信标(beacons)报告范围。
当你准备使用定位服务的时候,请遵循以下步骤:
- 查看你的应用程序是否被授权使用定位服务,如果你的应用认证状态还未确定,可以像描述那样请求认证许可。
- 查看是否有合适的定位服务供你使用,按照Determining the Availability of Location Services文档描述去做。
- 在你的代码中创建一个
CLLocationManager
类的实例并存储一个强引用类型的指针指向该实例变量。在包含该对象的所有任务被完成之前,要对CLLocationManager
对象保持强引用,因为CLLocationManager
是异步运行的,所以在局部变量中存储位置管理器是不够的。 - 将自定义的对象赋值给
CLLocationManager
对象的delegate
属性。自定义对象必须遵循CLLocationManagerDelegate
协议。 - 配置你打算使用的服务的相关属性。例如,当获取位置更新时,总是要配置
distanceFilter
和desiredaccuracy
属性。 - 调用适当的方法启动事件传递。
对于你使用的服务,可以准确的配置任何和服务相关的属性。Core Location
在不被需要的情况下通过强制关闭硬件来管理电源。例如,将位置事件预期精度设置为1公里,可以使位置管理器灵活的关闭GPS硬件,只依靠WiFi或基站,这样可以节约大量的电能。
所有位置和方向相关的更新都被传递给相关联的委托对象,你提供的自定义的类。更多和接收事件委托方法的信息可以看CLLocationManagerDelegate
主题
对于定位服务的请求认证
- requestWhenInUseAuthorization
// 请求当应用处于前台的时候允许使用定位服务
- requestAlwaysAuthorization
// 请求在应用运行时允许使用定位服务
CLAuthorizationStatus
// 常量,指示应用是否被授权使用定位服务。
确定服务的可用性
+ authorizationStatus
// 返回应用对于定位服务的授权状态
+ locationServicesEnabled
// 返回一个布尔值,指示定位服务是否被授权给设备
+ deferredLocationUpdatesAvailable
// 返回一个布尔值,指示设备是否支持延迟位置更新
+ significantLocationChangeMonitoringAvailable
// 返回一个布尔值,指示明显的位置更新服务是否有效
+ headingAvailable
// 返回一个布尔值,指示位置管理器是否能够产生方向相关的事件
+ isMonitoringAvailableForClass:
// 返回一个布尔值,指示设备通过指定的类是否支持区域监测
+ isRangingAvailable
// 返回一个布尔值,指示设备是否支持蓝牙信标的范围。