我目前正在开发应用程序并遇到问题。 我的应用程序的目的是看看有人离开工作。为了使其在100%的时间内工作,应用程序应该能够在应用程序打开时,在后台或终止(被杀死)时获取用户的位置。我的理解是你必须使用重要的位置更改功能。 但是,它没有按预期工作。
的AppDelegate:
//handle location changes when app is terminated and waken up by the OS
if launchOptions?[UIApplicationLaunchOptionsKey.location] != nil {
print("Restarted app due to a location update")
request = Locator.subscribeSignificantLocations(onUpdate: { newLoc in
let db: FirebaseDB = FirebaseDB.shared
db.postCoordinates(coordinates: CLLocation(latitude: 9.99, longitude: 9.99))
print("new loc found -> \(newLoc)")
}, onFail: {(err, lastLoc) in
print("failed to get loc, -> \(err)")
})
//send new post to DB
}
//subscribeSignificantLocations -> power efficient
request = Locator.subscribeSignificantLocations(onUpdate: { newLoc in
print("new loc found -> \(newLoc)")
}, onFail: {(err, lastLoc) in
print("failed to get new loc, -> \(err)")
})
除了在应用程序终止时获取位置外,一切正常...
提前致谢!
答案 0 :(得分:1)
经过数小时的搜索和阅读,我找到了一个可行的解决方案。 (注意:我正在研究地理围栏,需要在用户离开特定区域时通知/调用该API )
第一步也是最重要的一步,就是要获得用户的“始终” 授权以进行位置访问。
第二,即使应用终止后,我们也需要使用arr1[0]=[...arr2];
arr1[counter]=[...arr2];
进行位置更新。
startMonitoringSignificantLocationChanges()
下面是获取本地通知以更新位置信息的代码。
locationManager.requestAlwaysAuthorization()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.allowsBackgroundLocationUpdates = true
locationManager.startUpdatingLocation()
locationManager.startMonitoringSignificantLocationChanges() //THIS IS WHERE THE MAGIC HAPPENS
希望有帮助。