版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.11.25 |
前言
很多的app都有定位功能,比如说滴滴,美团等,他们都需要获取客户所在的位置,并且根据位置推送不同的模块数据以及服务,可以说,定位方便了我们的生活,接下来这几篇我们就说一下定位框架
CoreLocation
。感兴趣的可以看我写的上面几篇。
1. CoreLocation框架详细解析 —— 基本概览(一)
2. CoreLocation框架详细解析 —— 选择定位服务的授权级别(二)
确定定位服务的可用性
确定哪些位置服务在用户设备上处于活动状态并可用。
并非所有Core Location
服务都可在每台设备上使用,并且在某些情况下服务可能暂时不可用:
- 该设备没有支持该功能所需的硬件。
- 用户在系统设置中禁用位置服务。
- 用户拒绝访问您的应用的位置服务。
- 用户的设备处于飞行模式,无法收集位置数据。
- 后台应用程序刷新
Background App Refresh
已禁用,您正在监视区域或使用需要该功能的重大更改位置服务significant-change location service
。
在使用任何特定位置服务之前,请使用CLLocationManager
对象的方法检查该服务的可用性。 表1列出了您调用的方法,并解释了相应服务的所有硬件要求。
方法 | 描述 |
---|---|
locationServicesEnabled |
告诉您是否可以获取用户当前位置的地理坐标。 该服务通常在所有设备上可用。 |
significantLocationChangeMonitoringAvailable |
告诉您是否可以使用重大变更位置服务获取用户的位置。 此服务需要特定的硬件,可能并不适用于所有设备。 |
isMonitoringAvailableForClass: |
告诉您是否可以使用区域监控来检测进入或退出地理区域或iBeacon区域。 支持地理区域监视需要特定的硬件,并且通常在所有iOS设备上可用。 支持iBeacon区域监视需要蓝牙硬件,并且通常在所有设备上都可用。 |
headingAvailable |
告诉设备是否能够提供指南针相关的指向。 这项服务需要磁力计的存在。 |
isRangingAvailable |
告诉您是否可以获取到附近的iBeacon的相对距离。 该服务需要蓝牙硬件,并且通常在所有设备上可用。 |
Listing 1
显示了如何检查标准位置服务的可用性。 根据这些服务的可用性,您将相应地启用或禁用应用程序的功能。
// Listing 1 Checking for the availability of the standard location service
func checkForLocationServices() {
if locationManager.locationServicesEnabled {
// Location services are available, so query the user’s location.
} else {
// Update your app’s UI to show that the location is unavailable.
}
}
如果您尝试启动不可用的服务,则CLLocationManager
对象会调用其委托的与故障相关的方法之一。 例如,如果区域监控region monitoring
不可用,则会调用locationManager:monitoringDidFailForRegion:withError:
方法。
重要提示:当服务不可用时,应用程序应该优雅地失败并提供其他有用的功能。 如果没有服务会使您的应用程序无用,您可以在应用程序的Info.plist中指出该服务的要求。
后记
未完,待续~~~