在swift 4中使用startMonitoringSignificantLocationChanges的正确方法是什么?

时间:2017-12-16 23:47:00

标签: ios core-location swift4

我尝试制作一个正在运行的应用,我想使用方法startMonitoringSignificantLocationChanges,但我遗漏了一些东西,因为没有触发文档所说的didUpdateLocations

我已成功使用CLLocationManager类的startUpdatingLocation方法,我完全可以将它用于我的兴趣,但我想了解为什么我的实现不起作用。

所以,我有这段代码:

let locationManager = CLLocationManager()
func determineMyCurrentLocation() {

    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.allowsBackgroundLocationUpdates = true

    print("authorization Status: \(CLLocationManager.authorizationStatus().rawValue)")

    if CLLocationManager.locationServicesEnabled() {
        locationManager.startUpdatingLocation() //(1)
        //(2)locationManager.startMonitoringSignificantLocationChanges()
        locationManager.distanceFilter = 20
        //locationManager.start
        //locationManager.startUpdatingHeading)(
    }
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { print("yaaay!") }

如果您注释(1)并取消注释2,则永远不会触发func locationManager ...等。

另外,我的info.plist设置了正确的密钥,“隐私 - 使用时的位置使用说明”和“隐私 - 始终和使用时的位置使用说明”。)

有什么想法吗?

提前致谢。

编辑:我的问题不精确。我将locationManager属性作为类成员,并在info.plist中完成了属性

1 个答案:

答案 0 :(得分:1)

startMonitoringSignificantLocationChanges需要始终授权。这也意味着您应该在功能部分打开“后台模式”并选择“位置更新”。您还需要Privacy - Location Always Usage Description尝试这两项,您应该会收到重要的位置更改更新。