我可以在应用运行时找到用户的当前位置。但是当应用程序被杀时我无法找到位置。我怎样才能找到位置?
此代码为我提供了当前位置;
func determineMyCurrentLocation() {
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.startUpdatingLocation()
locationManager.startUpdatingHeading()
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let userLocation:CLLocation = locations[0] as CLLocation
print("user latitude = \(userLocation.coordinate.latitude)")
print("user longitude = \(userLocation.coordinate.longitude)")
latitude = userLocation.coordinate.latitude
longitude = userLocation.coordinate.longitude
UserDefaults(suiteName: "group.com.ReelKapi")!.set(latitude, forKey:"latitude")
UserDefaults(suiteName: "group.com.ReelKapi")!.set(longitude, forKey:"longitude")
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error)
{
print("Error \(error)")
}
答案 0 :(得分:1)
首先,应用的用户必须允许您的应用在后台监控位置。我看到您正在使用requestAlwaysAuthorization()
请求该权限,因此该部分已涵盖。
此外,您必须将allowsBackgroundLocationUpdates设置为YES。
接下来,您应该向应用包的plist添加特定的Background Mode location
key。
完成所有设置后,在BG模式下,您的应用将能够从您的代码现在使用的标准位置服务中获取活动(startUpdatingLocation()
)。
如果您的应用被用户或iOS杀死,它将再次加载到后台以接收区域进入/退出事件,访问事件或重要位置更新。因此,如果您希望重新启动应用,则必须使用其中一种。
答案 1 :(得分:0)
当应用程序被杀时操作系统不允许运行任何代码,因此您不能获得任何更新,尽管您可以使用nsuserDefaults中以前保存的位置。仅当用户重新启动应用程序时,它才处于前台状态,您可以从位置管理器获取更新位置。