【问题标题】:CLLocationManager in ios7 stops workingios7 中的 CLLocationManager 停止工作
【发布时间】:2014-01-31 08:22:17
【问题描述】:

我的CLLocationManager 在用户首次进入应用程序时启动。我正在这样初始化它:

self.locationManager = [[CLLocationManager alloc] init];
            self.locationManager.delegate = self;
            self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
            self.locationManager.distanceFilter = kDistanceFilter;
            self.locationManager.headingFilter = kHeadingFilter;

我正在使用地理围栏。

我在我的 .plist 中定义了required background modes

如果我使用 gpx 文件在模拟器中测试应用程序,它可以正常工作。到目前为止,一切顺利。

但是,我在这两个链接中阅读:

Start Location Manager in iOS 7 from background task

Background Location Services not working in iOS 7

iOS7 中,当位置在几分钟内没有改变时,CLLocation 进入睡眠状态。

我的问题是:

我根本不打电话给didUpdateLocation,我只想要didEnterRegion,或者didExitRegion。理论上,即使应用被杀死或用户位置在过去一小时内没有改变然后决定移动,它会起作用吗?

【问题讨论】:

  • 如果应用程序被用户明确杀死,在 iOS7 下,您将不会获得任何更新。对此无能为力。
  • 看看这篇 SO 帖子:stackoverflow.com/questions/18639976/…
  • @danielbeard 已经说过“如果应用程序被用户明确杀死,在 iOS7 下,您将不会获得任何更新”!!!您可以使用 Apple 的基于位置的提醒来检查此行为:如果您终止“Remainders”应用程序 - 您将永远不会收到有关位置进入/退出的通知!
  • ..如果位置没有改变,关于“CLLocation 进入睡眠状态” - 这是正常行为,你不这么认为吗? :)

标签: ios ios7 cllocationmanager geofencing clregion


【解决方案1】:

您的问题中有几个要素:

1- 为了不重复之前答案中的内容,我将首先在此链接中查看我的答案。如果用户停止移动,它将帮助您解决核心位置更新停止问题以及如何修改该行为: iOS7 Core Location not updating

2- 如果用户在 iOS7 中杀死了一个应用程序(通过在应用程序切换器中轻弹它),该应用程序将不会重新启动,因此您的位置更新和区域监控都不会在手机重新启动后重新启动。另一方面,如果应用程序因内存压力而被终止,iOS 将重新启动应用程序并在后台重新启动您的位置更新和区域监控。此外,如果您重新启动手机,区域监控将自动重新启动。您显然必须启用后台模式。

3- 现在您在讨论问题中的区域,所以我假设您已经实现了 CLCircularRegion。如果没有,那应该是第一步,然后是“startMonitoringForRegion”。在您的情况下,即使用户停止移动一段时间然后开始移动,应用程序也会在应用程序进入或退出区域时被唤醒/委托调用。

4- 确保也使用 locationManager: didDetermineState: forRegion:。这将允许应用程序在开始时确定它是在区域内还是在区域外。当您想到一个应用程序正在启动并且没有发生跨区域但了解用户是在区域内还是在区域外时,这很有用。

希望对你有帮助

【讨论】:

  • 感谢您的回答。我已经实现了其中的大部分。只是关于 2 的问题 - 当用户杀死应用程序时,区域监控停止工作?所以即使他进入区域/离开区域,如果应用被用户杀死,那么委托也不会被调用,对吧?
  • 没错。这是为了保护用户。苹果希望用户始终保持控制。因此,如果用户说他/她不希望应用程序在后台运行(即用户终止应用程序),那么它将被终止并且不会重新启动(并且其区域监控不会重新启动)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多