我尝试制作一个正在运行的应用,我想使用方法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中完成了属性
答案 0 :(得分:1)
startMonitoringSignificantLocationChanges
需要始终授权。这也意味着您应该在功能部分打开“后台模式”并选择“位置更新”。您还需要Privacy - Location Always Usage Description
尝试这两项,您应该会收到重要的位置更改更新。