2016-04-04 65 views
0

我正在构建一个位置跟踪应用程序,它将本地用户位置存储并每隔x秒将它们发送到服务器。在后台运行时每x秒重复执行一次任务

虽然应用程序在前台,但我可以使用NSTimer安排服务器更新任务,但是当应用程序在后台运行时,这是不可能的。

即使应用程序在后台模式下运行,我如何每x秒重复一次任务?

+0

不,除非你欺骗iOS。 – zcui93

回答

0

您不应该使用NSTimer。您应该使用CLLocationManager提供的功能。

使用CLLocationManager时,您可以将属性allowsBackgroundLocationUpdates设置为YES。然后您需要将Info.plist中的UIBackgroundModes密钥设置为YES以获得location值。

现在您将能够接收用户位置的后台更新。

startMonitoringSignificantLocationChanges应该继续在后台调用。

几个警告与背景的东西的话。 Apple在提交应用程序时非常重视这一点。如果他们认为不需要后台更新,他们会拒绝。同样,如果你在后台做的不是非常基本的东西,他们会拒绝它。

所以如果你想将用户的背景位置同步到服务器,我不会在后台执行此操作。相反,我会将用户的背景位置存储在NSUserDefaults或核心数据或其他内容中,然后当应用程序再次变为活动状态时,使用背景位置执行服务器同步。

Here's a link to CLLocationManager for reference

0

您可能更好地注册后台的重大位置更改,这意味着当用户位置发生显着变化时,您的应用程序将有少量时间来处理/发送它。

这可以使用apple docs轻松完成。