【问题标题】:How to update location while app in backgrounded using swift 2如何使用swift 2在后台应用程序更新位置
【发布时间】:2016-11-11 05:43:54
【问题描述】:

我正在使用MKMapView 开发应用程序。我想每 3 分钟将位置更新到服务器。现在我可以使用NSTimer 更新位置,但是当应用程序在后台时我无法更新。我搜索了其他堆栈溢出答案,但没有帮助。

我尝试过的:

  • 我打开了后台模式并选择了位置更新
  • 我将此代码包含在我的视图中确实加载方法:

    self.locationManager.allowsBackgroundLocationUpdates = true
    

接下来我能做什么?有人可以帮我做这个吗?

【问题讨论】:

  • 在 Plist UIBackgroundModes = location 中添加此键并点击此链接stackoverflow.com/questions/33385652/…
  • 我已将 NSlocationAlwaysUsageDescription 和 NSLocationAlwaysUseinUsageDescription 添加到 plist...这足以与背景一起使用吗???@shrikant Tanwade
  • 我已经在视图控制器中编写了所有函数,如何调用这些函数来 appdelegate....@ShrikantTanwade
  • 应用程序更新位置的时间是多少?我的意思是时间...
  • 3 分钟....@HiteshSurani

标签: ios swift swift2 location mkmapview


【解决方案1】:

定时器与运行循环一起工作。要有效地使用计时器,您应该了解运行循环的操作方式——请参阅 RunLoop 和线程编程指南。特别要注意的是,运行循环维护对其计时器的强引用,因此在将计时器添加到运行循环后,您不必维护自己对计时器的强引用。

定时器不是实时机制;它仅在已添加计时器的运行循环模式之一正在运行并且能够检查计时器的触发时间是否已过时触发。由于典型的运行循环管理的各种输入源,计时器的时间间隔的有效分辨率被限制在 50-100 毫秒的数量级。如果计时器的触发时间发生在长时间调用期间或运行循环处于不监视计时器的模式下,则计时器不会触发,直到运行循环下次检查计时器。因此,计时器触发的实际时间可能比计划的触发时间晚很长一段时间。From Apple official document.

当我们的应用程序在后台时调用此方法。操作系统将我们限制在(我相信)三十秒。三十秒后,我们的时间到了。 我们必须调用 completionHandler() (否则操作系统会认为我们用完了所有时间)。

尝试在里面执行你的任务

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
}

来源:-Background task.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多