iOS7核心位置未更新

Tay*_*man 12 objective-c core-location cllocationmanager ios7

我有一个非常简单的应用程序示例,初始化和更新用户位置..在设备上它成功地每隔一秒左右抛出另一个回调位置但是在设备上(运行iOS7的iPhone)调用该方法一次然后神秘地停止...

//Setup Location Manager in ViewDidLoad
locationManager = [[CLLocationManager alloc] init];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[locationManager setDelegate:self];
[locationManager startUpdatingLocation];

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
     NSLog(@"location services not turned on");
}

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
     NSLog(@"loactions %@", locations);
}

-(void)locationManager:(CLLocationManager *)manager
   didUpdateToLocation:(CLLocation *)newLocation
          fromLocation:(CLLocation *)oldLocation
{

    NSLog(@"new location %f, and old %f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);
}
Run Code Online (Sandbox Code Playgroud)

在iOS6中,这个应用程序完美无缺地更新了设备位置...自iOS7以来发生了哪些变化?

Kha*_*azi 12

这里有几件事:

1-我没有看到任何属性:pausesLocationUpdatesAutomatically.此属性的默认值为Yes.这意味着,根据您的活动类型(参见下面的#2),GPS将暂停更新,这可能是您没有获得更新的原因.该算法是一个黑盒子,只有Apple知道,也许它在iOS6和iOS7之间有所改变.将pausesLocationUpdatesAutomatically设置为NO会影响电池.

2-您应根据应用程序设置activityType.默认值是CLActivityTypeOther,我不确定它如何影响GPS算法和上面的#1.因此,为了最初测试您的应用程序,我会适当地设置activityType并将pausesLocationUpdatesAutomatically更改为否.在我的测试中,我会得到关于每一秒的更新(我在一夜之间测试).

3-位置更新测试需要移动.为了获得更好的结果,我会使用您设置的activityType进行测试.换句话说,如果activityType是CLActivityTypeFitness,我会四处走动来测试它等等.

在iOS7中不推荐使用4- locationManager didUpdateToLocation fromLocation.此外,如果实现了locationManager didUpdateLocations,则不会调用前者.所以在上面的例子中,没有调用locationManager didUpdateToLocation fromLocation.

5- kCLLocationAccuracyBestForNavigation和kCLLocationAccuracyBest之间没有真正的电池使用差异.另一方面,kCLLocationAccuracyBestForNavigation使用最高速GPS,并将其与加速度计数据相结合.

所以我首先设置activityType,将pausesLocationUpdatesAutomatically设置为NO并将desiredAccuracy更改为kCLLocationAccuracyBestForNavigation.一旦获得持续更新,我就会将pausesLocationUpdatesAutomatically设置为Yes并尝试使用代码来实现相同的应用程序可用性.

希望这可以帮助