我正在寻找一种在iOS应用程序中每n分钟更新一次后台位置的方法.我正在使用iOS 4.3,该解决方案适用于非越狱的iPhone.
我尝试/考虑了以下选项:
CLLocationManager startUpdatingLocation/startMonitoringSignificantLocationChanges:这根据预期在后台工作,基于配置的属性,但似乎不可能强制它每n分钟更新一次位置NSTimer:当应用程序在前台运行但似乎不是为后台任务设计时,是否有效UIApplication:beginBackgroundTaskWithExpirationHandler:据我所知,当应用程序移动到后台而不是实现"长时间运行"的后台进程时,这应该用于在后台完成一些工作(也限制时间).如何实施这些常规后台位置更新?
我想知道iOS系统是否在pausesLocationUpdatesAutomatically属性自动暂停后自动重启CLLocationManager的locationUpdates,或者我是否必须自己处理这个案例.
如果是,根据哪些规则,如果不知道如何知道我再次开始移动并应重新启动locationUpdates?
我做了一个位置应用程序.但核心位置不起作用.我在iPhone上测试了其他iPhone应用程序.
像谷歌地球,导航软件.其他应用程序也不起作用.
为什么不更新位置?
为什么'locationManager:didUpdateToLocation:fromLocation:'消息只被调用2次?
也许......我的iPhone崩溃了?或iOS 6 CoreLocation框架有一些错误?
位置服务 - 开启iPhone设置
的Info.plist
代码示例:
- (CLLocationManager *)setupLocationManager
{
if ([CLLocationManager locationServicesEnabled] && [CLLocationManager headingAvailable]) {
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.headingFilter = kCLHeadingFilterNone;
[locationManager startUpdatingLocation];
[locationManager startUpdatingHeading];
return locationManager;
}
return nil;
}
- (CLLocationManager *)locationManager
{
switch([CLLocationManager authorizationStatus])
{
case kCLAuthorizationStatusAuthorized:
_deltaTimeLocationReceived = 0.0;
if (_locationManager == nil)
_locationManager = [self setupLocationManager];
return _locationManager;
case …Run Code Online (Sandbox Code Playgroud) 我从" 会议303 - 从位置服务保持正轨 "WWDC 2012开始,遵循AutoPause的示例
在该示例中,您可以看到如何启用AutoPause,并且有两种方法被调用:
-(void) locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager
-(void) locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager
Run Code Online (Sandbox Code Playgroud)
我做了同样的例子,但这些方法从未被调用过.谁试过同样的?