我遇到的问题是,当应用程序进入后台模式时,我的应用程序不会更新用户位置。
我已经阅读了很多关于UIBackgroundModes的内容“位置”的应用属性。
即使在那之后,我的应用程序也会在后台删除位置管理器并停止更新用户位置。
我错过了什么吗?
答案 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”。