我的问题是当应用程序进入后台模式时,我的应用程序不会更新用户位置。
我已经阅读了很多内容,并且已经在应用程序属性中为 UIBackgroundModes 设置了 flan“位置”。
即使在那之后,我的应用程序也会在后台删除位置管理器并停止更新用户位置。
我错过了什么吗?
我的问题是当应用程序进入后台模式时,我的应用程序不会更新用户位置。
我已经阅读了很多内容,并且已经在应用程序属性中为 UIBackgroundModes 设置了 flan“位置”。
即使在那之后,我的应用程序也会在后台删除位置管理器并停止更新用户位置。
我错过了什么吗?
在 iOS5 中一定要使用locationManager:didUpdateToLocation:fromLocation:
. 这种方法使您的应用即使在后台也能请求位置服务。在 iOS6 中,您应该使用在 iOS6locationManager:didUpdateLocations:
中locationManager:didUpdateToLocation:fromLocation:
已弃用的 as。
在 iOS6 中,请确保添加以下内容,否则当系统认为您没有使用它时,定位服务将被关闭:
if ([self.locationManager respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]) {
self.locationManager.pausesLocationUpdatesAutomatically = NO;
}
在 iOS 中,在后台模式下使用应用程序受到严格限制。通常,当在 UIBackgroundModes 中设置正确的属性时,您的应用程序将在每次位置更新时被调用。通过将所需的准确度设置为低(例如kCLLocationAccuracyBest
),即使位置稍有更新,您的应用也会启动。
然而,在一段时间后,应用程序没有回到前台,应用程序将被完全杀死,位置服务将被关闭(后者仅从 iOS 6 开始)。由于无法让应用程序在后台不断地从 iOS 获取更新,这让我放弃了我的项目。
我遇到了同样的问题,基本上你必须在你的 CLLocationManager 上将 pausesLocationUpdatesAutomatically 标志设置为“NO”。
没有位置变化意味着没有位置,意味着没有事件,也没有行动。
如果 iphone 移动并设置了标准定位模式 ( startUpdatingLocation
),您通常会每秒获得一次 GPS 定位。(期望准确度 =kCLLocationAccuracyBest
或kCLLocationAccuracyBestForNavigation
)
如果定位服务已启动,startMonitoringSignificantLocationChanges
那么您将只能获得由手机信号塔变化确定的位置。
此外,由于 ios6 存在延迟模式,因此您的应用程序在后台时不会更改位置,但稍后会同时更改所有位置。(我对这种模式没有个人经验)。但这也是在 ios6 及更高版本中要考虑的
来自 CLLocationManager 描述
在 iOS 6 及更高版本中,您可以在应用处于后台时延迟位置数据的传递。建议您在您的应用程序可以稍后处理数据而没有任何问题的情况下使用此功能。例如,跟踪用户在远足路径上的位置的应用程序可以推迟更新,直到用户远足一定距离,然后一次性处理所有点。延迟更新可以让您的应用程序在更长的时间内保持休眠状态,从而有助于节省电量。