如何检测系统范围的定位服务变化

How to detect system wide Location Services changes

我正在处理用户可能会关闭其 phone 上的定位服务的潜在案例。

现在,我有:

func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    if status == .Authorized || status == .AuthorizedWhenInUse {
        manager.startUpdatingLocation()
    } else {
        manager.stopUpdatingLocation()
    }
}

我假设只要用户进入“设置”并亲自更改我的应用程序设置,就会触发此事件。每当用户关闭所有应用程序的定位服务时,这是否也会触发?文档似乎没有详细介绍它。

是的。在全球范围内启用定位服务也将触发该方法,这实际上意味着 kCLAuthorizationStatusDenied 将作为当前状态发送。

一旦用户再次启用位置服务,该方法将再次被触发,其他枚举选项之一将作为当前状态发送 - 值将取决于该特定应用的位置服务设置历史记录.