即使在应用程序属性中设置了标志“location”,CLLocationManager也会停止在后台更新位置

时间:2013-01-31 17:59:40

标签: ios objective-c cllocationmanager

我遇到的问题是,当应用程序进入后台模式时,我的应用程序不会更新用户位置。

我已经阅读了很多关于UIBackgroundModes的内容“位置”的应用属性。

即使在那之后,我的应用程序也会在后台删除位置管理器并停止更新用户位置。

我错过了什么吗?

4 个答案:

答案 0 :(得分:2)

在iOS5中,请务必使用locationManager:didUpdateToLocation:fromLocation:。这种方法可以让您的应用程序即使在后台也可以请求位置服务。在iOS6中,您应该使用locationManager:didUpdateLocations:,因为在iOS6中不推荐使用locationManager:didUpdateToLocation:fromLocation:

在iOS6中,请确保添加以下内容,否则当系统认为您未使用时,将启用位置服务:

if ([self.locationManager respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]) {
    self.locationManager.pausesLocationUpdatesAutomatically = NO;
}

答案 1 :(得分:1)

在iOS中严格限制在后台模式下使用应用。 通常,在UIBackgroundModes中设置正确的属性时,将在每个位置更新时调用您的应用程序。通过将所需的准确度设置得较低(例如kCLLocationAccuracyBest),即使稍微更新了该位置,您的应用也会启动。

然而在一段时间之后并且应用程序未被带回前台,应用程序将被完全杀死并且位置服务将被关闭(后者仅从iOS 6开启)。由于无法让应用程序在后台继续从iOS获取更新,因此我放弃了我的项目。

答案 2 :(得分:1)

位置没有变化意味着没有位置,意味着没有事件,也没有任何行动。

如果iphone移动并设置了标准位置模式(startUpdatingLocation) 你通常每秒可以获得一次GPS定位。 (desiredAccuracy = kCLLocationAccuracyBest  或kCLLocationAccuracyBestForNavigation

如果startMonitoringSignificantLocationChanges启动了位置服务,那么您只能通过手机信号塔更改来确定位置。

此外,由于ios6有一个延迟模式,因此您的应用程序在后台时不会更改位置,但后来所有位置都会立即更改。 (我没有这种模式的个人经验)。但这也应该在ios6及更高版本中考虑

来自CLLocationManager描述

  

在iOS 6及更高版本中,您可以在何时推迟发送位置数据   你的应用程序在后台。建议您使用它   在您的应用可以稍后处理数据的情况下使用此功能   没有任何问题。例如,跟踪用户的应用程序   远足径上的位置可以推迟更新,直到用户加息   一定距离,然后一次处理所有点。推迟   通过允许您的应用程序保持睡眠状态,更新有助于节省电量   更长的时间。

答案 3 :(得分:1)

我遇到了同样的问题,基本上你必须在你的CLLocationManager上将pausesLocationUpdatesAutomatically标志设置为“NO”。