当我的应用处于后台或被杀死状态时,我想获得一个新位置。我搜索了很多,并在Apple doc中找到了方法。当app处于后台或被杀死状态时,startMonitoringSignificantLocationChanges()用于更新位置。但是当我尝试这种方法时,没有得到处于被杀死状态的位置。这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.startMonitoringSignificantLocationChanges()
}
//MARK: LOCATION MANAGER:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let long :CLLocationDegrees = manager.location?.coordinate.longitude ?? 00.00000
let lat :CLLocationDegrees = manager.location?.coordinate.latitude ?? 00.00000
print(lat)
print(long)
let location = LocationTracking()
location.latitude = lat
location.longitude = long
try! realm.write {
realm.add(location, update: false)
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Error",error.localizedDescription)
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if (status == CLAuthorizationStatus.denied) {
print("Location access denied")
}
}
设置后台模式功能后,可以使用startMonitoringSignificantLocationChanges()而不是startUpdatingLocation()。此方法会通知您500米的变化。
你可以通过公共API阅读这句话。
只要设备从之前的通知移动500米或更长时间,应用就会收到通知。它不应该比每五分钟更频繁地预期通知。如果设备能够从网络检索数据,则位置管理器更有可能及时发送通知。