静止时触发 startMonitoringSignificantLocationChanges
startMonitoringSignificantLocationChanges triggering when stationary
我有一个客户申请要求我使用 startMonitoringSignificantLocationChanges()
方法,但是当我静止不动并且有一段时间没有移动时,它仍然会触发。
我的位置管理器代码如下:
locationManager = CLLocationManager()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
locationManager.distanceFilter = 1500
locationManager.startUpdatingLocation()
locationManager.delegate = self
locationManager.startMonitoringSignificantLocationChanges()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
然后我的didUpdateLocations
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location: CLLocation = locations.last!
print("Location: \(location)")
print("SIGNIFICANT CHANGE")
}
当我旅行时,它按预期每 1500 米打印一次,但它在意外时触发,我找不到解决方案或可能的问题。
您不能依赖 startMonitoringSignificantLocationChanges()
来获得一致的结果。如果你去一个信号塔密度低的区域,在它被触发之前你必须移动的距离将再次改变。这是一种低功耗的定位方法,可靠性低。
话虽这么说,它在你没有移动时触发是不寻常的。也许您的设备切换了手机信号塔?也许这是一个错误。提交一份报告,制作一个小型测试项目,然后将其与您的日志文件一起发送给 Apple。
我不知道您的要求,但一种解决方案是保存(在实例变量中并作为文件)最后找到的位置并比较该位置与新位置之间的距离,看看您是否真的移动过很长的路要走。另一种是使用区域监控。
activityType
会有帮助吗?
既然你用它来旅行,你可能会忽略步行或非汽车运动?
如果这不是一个选项,您可以尝试在 didUpdateLocations
中计算 CLLocation 对象的 horizontal/vertical 准确性。如果它不在阈值内则忽略(这可能会导致一些漏报)
我有一个客户申请要求我使用 startMonitoringSignificantLocationChanges()
方法,但是当我静止不动并且有一段时间没有移动时,它仍然会触发。
我的位置管理器代码如下:
locationManager = CLLocationManager()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
locationManager.distanceFilter = 1500
locationManager.startUpdatingLocation()
locationManager.delegate = self
locationManager.startMonitoringSignificantLocationChanges()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
然后我的didUpdateLocations
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location: CLLocation = locations.last!
print("Location: \(location)")
print("SIGNIFICANT CHANGE")
}
当我旅行时,它按预期每 1500 米打印一次,但它在意外时触发,我找不到解决方案或可能的问题。
您不能依赖 startMonitoringSignificantLocationChanges()
来获得一致的结果。如果你去一个信号塔密度低的区域,在它被触发之前你必须移动的距离将再次改变。这是一种低功耗的定位方法,可靠性低。
话虽这么说,它在你没有移动时触发是不寻常的。也许您的设备切换了手机信号塔?也许这是一个错误。提交一份报告,制作一个小型测试项目,然后将其与您的日志文件一起发送给 Apple。
我不知道您的要求,但一种解决方案是保存(在实例变量中并作为文件)最后找到的位置并比较该位置与新位置之间的距离,看看您是否真的移动过很长的路要走。另一种是使用区域监控。
activityType
会有帮助吗?
既然你用它来旅行,你可能会忽略步行或非汽车运动?
如果这不是一个选项,您可以尝试在 didUpdateLocations
中计算 CLLocation 对象的 horizontal/vertical 准确性。如果它不在阈值内则忽略(这可能会导致一些漏报)