猿问

背景位置服务不适用于IOS 7

背景位置服务不适用于IOS 7

我最近升级了我的iOS设备以使用iOS 7。我们正在开发的一个应用程序使用后台定位服务来跟踪设备位置,我们的所有测试人员都报告说,该应用程序似乎不再跟踪iOS 7下的背景信息。

我们已经证实,在设备上的设置中启用了该应用程序的回退,而之前的构建在iOS 6下运行得非常完美。即使该设备被循环使用,该应用程序在位置更新后也会重新启动。

在iOS 7下,是否还需要做一些其他的工作呢?


猛跑小猪
浏览 472回答 3
3回答

汪汪一只猫

方法和解释:-我每1分钟重新启动一次位置管理器。DIDUpdateLocations我允许位置管理器从设备中获取10秒的位置,然后关闭它(以节省电池)。以下部分法典:--(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{for(int i=0;i<locations.count;i++){     CLLocation * newLocation = [locations objectAtIndex:i];     CLLocationCoordinate2D theLocation = newLocation.coordinate;     CLLocationAccuracy theAccuracy = newLocation.horizontalAccuracy;     NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];     if (locationAge > 30.0)         continue;     //Select only valid location and also location with good accuracy     if(newLocation!=nil&&theAccuracy>0        &&theAccuracy<2000        &&(!(theLocation.latitude==0.0&&theLocation.longitude==0.0))){         self.myLastLocation = theLocation;         self.myLastLocationAccuracy= theAccuracy;         NSMutableDictionary * dict = [[NSMutableDictionary alloc]init];         [dict setObject:[NSNumber numberWithFloat:theLocation.latitude] forKey:@"latitude"];         [dict setObject:[NSNumber numberWithFloat:theLocation.longitude] forKey:@"longitude"];         [dict setObject:[NSNumber numberWithFloat:theAccuracy] forKey:@"theAccuracy"];         //Add the vallid location with good accuracy into an array         //Every 1 minute, I will select the best location based on accuracy and send to server         [self.shareModel.myLocationArray addObject:dict];     }}//If the timer still valid, return it (Will not run the code below)if (self.shareModel.timer)     return;self.shareModel.bgTask = [BackgroundTaskManager sharedBackgroundTaskManager];[self.shareModel.bgTask beginNewBackgroundTask];//Restart the locationMaanger after 1 minuteself.shareModel.timer = [NSTimer scheduledTimerWithTimeInterval:60 target:self                                                        selector:@selector(restartLocationUpdates)                                                        userInfo:nil                                                         repeats:NO];//Will only stop the locationManager after 10 seconds, so that we can get some accurate locations//The location manager will only operate for 10 seconds to save batteryNSTimer * delay10Seconds;delay10Seconds = [NSTimer scheduledTimerWithTimeInterval:10 target:self                                                 selector:@selector(stopLocationDelayBy10Seconds)                                                 userInfo:nil                                                  repeats:NO];  }我收到了一些请求,要求在一定时间间隔内向服务器发送位置时添加示例代码。我添加了示例代码,并结合了背景任务管理器的修复来解决后台运行较长时间的故障。

慕神8447489

我认为他们做了一个优化(可能使用运动传感器),以检测手机的“相对”静止定位,他们停止位置更新。这只是猜测,但我目前的测试显示:开始位置更新;(测试精度为10米和100米,每次3次)关闭设备屏幕,将应用程序放到后台;将设备静止不动(例如在桌子上)30分钟。我记录的数据显示,地学更新在大约15米和30米之后停止。这样,您所做的所有其他后台处理也将终止。我的设备是iPhone 5和iOS 7。我95%肯定,iOS 6/6.1的情况并非如此。在那里获得100米精度的地理更新,可以让你在后台连续运行。如果每8分钟重新启动一次位置管理器,它应该会连续运行。我还没有在最新的测试,但这是我如何重新启动它时,我写了这篇文章。我希望这是有帮助的。-&nbsp;(void)tryRestartLocationManager{ &nbsp;&nbsp;&nbsp;&nbsp;NSTimeInterval&nbsp;now&nbsp;=&nbsp;[[NSDate&nbsp;date]&nbsp;timeIntervalSince1970]; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;seconds&nbsp;=&nbsp;round(floor(now&nbsp;-&nbsp;locationManagerStartTimestamp)); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;seconds&nbsp;>&nbsp;(60&nbsp;*&nbsp;8)&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[locationManager&nbsp;stopUpdatingLocation]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[locationManager&nbsp;startUpdatingLocation]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;locationManagerStartTimestamp&nbsp;=&nbsp;now; &nbsp;&nbsp;&nbsp;&nbsp;}}
随时随地看视频慕课网APP
我要回答