CoreLocation框架详细解析 —— 确定定位服务的可用性(三)

版本记录

版本号 时间
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中指出该服务的要求。

后记

未完,待续~~~

CoreLocation框架详细解析 —— 确定定位服务的可用性(三)_第1张图片

你可能感兴趣的:(CoreLocation框架详细解析 —— 确定定位服务的可用性(三))