【问题标题】:Location update in background mode only 10 min后台模式下的位置更新仅需 10 分钟
【发布时间】:2015-12-13 06:35:10
【问题描述】:

我正在开发一个 iPhone 应用,即使应用在后台,它也需要不断更新位置。

我做的是:

  1. 为位置更新设置后台模式
  2. 设置desiredAccuracy = kCLLocationAccuracyBestForNavigation
  3. 实现 -(void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
  4. 调用 [locationManager startUpdatingLocation]

当应用程序进入后台时,它将保持更新位置大约只有 10 分钟。然后,更新停止。

有人知道为什么吗? 如何在后台进行长时间的位置更新?

谢谢!

【问题讨论】:

  • 我认为设备会在 10 分钟后被锁定(进入睡眠状态)。您只能在设备未锁定时在后台运行。
  • 不,10 分钟是应用程序在暂停之前可以继续在后台运行的限制。
  • 所以如果设备处于睡眠模式,它仍然可以在后台工作吗?
  • 我有一个应用可以在后台全天每5分钟保存一次位置,所以我认为这里没有超时问题。可能只是没有为后台位置更新调用正确的方法。您可能需要考虑使用这些方法在后台保存位置:allowDeferredLocationUpdatesUntilTraveled、performFetchWithCompletionHandler、didFinishDeferredUpdatesWithError

标签: ios objective-c


【解决方案1】:

来自 Apple 文档

您可以从 Xcode 项目中功能选项卡的背景模式部分启用位置支持。 (您也可以通过在应用程序的 Info.plist 文件中包含带有位置值的 UIBackgroundModes 键来启用此支持。)启用此模式不会阻止系统暂停应用程序,但它会告诉系统它应该唤醒每当有新的位置数据要交付时,应用程序。因此,此键有效地让应用程序在后台运行,以便在位置更新发生时处理它们。

似乎设置背景模式就足够了。我让它在我正在开发的应用程序中工作,我看到的唯一区别是我将 pausesLocationUpdatesAutomatically 设置为 NO

【讨论】:

  • 哦!谢谢西蒙!我将 pausesLocationUpdatesAutomatically = NO 添加到我的代码中,现在它工作正常!
【解决方案2】:

为了在我的 QT 应用程序进入后台时解决此问题,我将停止更新位置,将精度从最佳降低到 kCLLocationAccuracyNearestTenMeters,并将距离过滤器从无设置为 50 米,然后启动更新位置。

如果您需要更精细的位置数据,可以尝试使用较低的过滤器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多