如何使用 swift 2 在应用程序处于后台时更新位置
How to update location while app in backgrounded using swift 2
我正在使用 MKMapView
开发应用程序。我想每 3 分钟向服务器更新一次位置。现在我可以使用 NSTimer
更新位置,但是当应用程序在后台时我无法更新。我搜索了其他堆栈溢出答案,但没有帮助。
我尝试过的:
- 我打开了后台模式并选择了位置更新
我将此代码包含到我的视图中确实加载了方法:
self.locationManager.allowsBackgroundLocationUpdates = true
接下来我能做什么?有人可以帮我做这个吗?
定时器与 运行 循环协同工作。要有效地使用计时器,您应该了解 运行 循环的运行方式——请参阅 RunLoop 和线程编程指南。请特别注意 运行 循环维护对其计时器的强引用,因此在将计时器添加到 运行 循环后,您不必维护自己对计时器的强引用。
计时器不是实时机制;它仅在添加了定时器的 运行 循环模式之一为 运行ning 并且能够检查定时器的触发时间是否已过时触发。由于典型的 运行 循环管理的各种输入源,定时器时间间隔的有效分辨率限制在 50-100 毫秒的数量级。如果定时器的触发时间发生在长时间调用期间或 运行 循环处于未监视定时器的模式时,定时器不会触发,直到下一次 运行 循环检查定时器。因此,计时器可能触发的实际时间可能比计划的触发时间晚了很长一段时间。From Apple official document.
当我们的应用程序在后台时调用此方法。 OS 将我们限制在(我相信)三十秒内。三十秒后,我们的时间到了。
我们必须调用 completionHandler()(否则 OS 会认为我们用完了所有时间)。
尝试在里面完成你的任务
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
return true
}
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
// do background work
}
来源:-
我正在使用 MKMapView
开发应用程序。我想每 3 分钟向服务器更新一次位置。现在我可以使用 NSTimer
更新位置,但是当应用程序在后台时我无法更新。我搜索了其他堆栈溢出答案,但没有帮助。
我尝试过的:
- 我打开了后台模式并选择了位置更新
我将此代码包含到我的视图中确实加载了方法:
self.locationManager.allowsBackgroundLocationUpdates = true
接下来我能做什么?有人可以帮我做这个吗?
定时器与 运行 循环协同工作。要有效地使用计时器,您应该了解 运行 循环的运行方式——请参阅 RunLoop 和线程编程指南。请特别注意 运行 循环维护对其计时器的强引用,因此在将计时器添加到 运行 循环后,您不必维护自己对计时器的强引用。
计时器不是实时机制;它仅在添加了定时器的 运行 循环模式之一为 运行ning 并且能够检查定时器的触发时间是否已过时触发。由于典型的 运行 循环管理的各种输入源,定时器时间间隔的有效分辨率限制在 50-100 毫秒的数量级。如果定时器的触发时间发生在长时间调用期间或 运行 循环处于未监视定时器的模式时,定时器不会触发,直到下一次 运行 循环检查定时器。因此,计时器可能触发的实际时间可能比计划的触发时间晚了很长一段时间。From Apple official document.
当我们的应用程序在后台时调用此方法。 OS 将我们限制在(我相信)三十秒内。三十秒后,我们的时间到了。 我们必须调用 completionHandler()(否则 OS 会认为我们用完了所有时间)。
尝试在里面完成你的任务
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
return true
}
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
// do background work
}
来源:-