startMonitoringSignificant LocationChanges() 在物理设备上不起作用



当位置管理器设置为startMonitoringSignificantLocationChanges()时,我在物理设备上显示位置时遇到问题。

一切都在模拟器中运行,但是当我让它在我的 iPhone 上运行时,没有返回坐标,如果我将其更改为startUpdatingLocation()它适用于我的物理设备。

知道可能出了什么问题吗?

我的代码:

let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
startReceivingSingificantLocationChanges()
}
func startReceivingSingificantLocationChanges() {
if !CLLocationManager.significantLocationChangeMonitoringAvailable() {
//the service is not available
print("Service is not available")
return
}
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.startMonitoringSignificantLocationChanges()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.first{
print(location.coordinate)
coordinatesLbl.text = "LAT:(location.coordinate.latitude) LONG:(location.coordinate.longitude)"
}
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == CLAuthorizationStatus.denied{
showLocationDisabledPopUp()
print("didChangeAuthorization")
}
}

关于startMonitoringSignificantLocationChanges()的文档指出:

当设备从其上一个通知移动 500 米或更多时,应用可能会收到通知。通知的频率不应超过每五分钟一次。如果设备能够从网络检索数据,则位置管理器更有可能及时发送通知。

因此,在使用此方法时,您不应该经常期望它们。

startUpdatingLocation更新的频率要高得多,这就是这样做的原因。

我试过这个,但遇到了同样的问题。我最终将位置desiredAccuracy设置为kCLLocationAccuracyKilometer.这起到了让我发生重大位置变化的预期效果。执行此操作的另一种方法是使用startUpdatingLocation,一旦您拥有当前位置,将位置管理器更改为startMonitoringSignificantLocationChanges.

最新更新