Swift startMonitoringSignificantLocationChanges()不';不能在物理设备上工作
当locationManager设置为Swift startMonitoringSignificantLocationChanges()不';不能在物理设备上工作,swift,cllocationmanager,Swift,Cllocationmanager,当locationManager设置为startMonitoringSignificationLocationChanges()时,我在物理设备上显示位置时遇到问题 一切都在模拟器中工作,但当我让它在iPhone上运行时,并没有返回坐标,如果我将其更改为startUpdatingLocation(),它在我的物理设备上工作 你知道会出什么问题吗 我的代码: let locationManager = CLLocationManager() override func viewDidL
startMonitoringSignificationLocationChanges()
时,我在物理设备上显示位置时遇到问题
一切都在模拟器中工作,但当我让它在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
设置为KCallocationAccuracykilometer
。这产生了预期的效果,使我的位置发生了重大变化。另一种方法是使用startUpdatingLocation
,一旦您有了当前位置,将位置管理器更改为startMonitoringSignificantLocationChanges
,谢谢您的回复,但它不应该给您当前位置,然后在500-1公里后更新它吗?现在它根本不返回坐标。文档说要传递的第一个事件通常是最近缓存的位置事件(如果有)
,因此您可能无法获得第一个