12

我有一个非常简单的应用程序示例,它初始化和更新用户位置。在设备上,它每秒左右成功抛出另一个回调位置,但是在设备(运行 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);
}

在 iOS6 中,此应用程序运行良好,并不断更新设备位置......自 iOS7 以来发生了什么变化?

4

1 回答 1

12

这里有几件事:

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

2-您应该根据您的应用程序设置您的活动类型。默认值为 CLActivityTypeOther,我不确定它如何影响 GPS 算法和上面的 #1。因此,为了最初测试您的应用程序,我会适当地设置 activityType 并将 pausesLocationUpdatesAutomatically 更改为 No。在我的测试中,我会持续获得大约每秒的更新(我在一夜之间进行了测试)。

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

4- locationManager didUpdateToLocation fromLocation 在 iOS7 中已弃用。另外如果实现了locationManager didUpdateLocations,则不会调用前者。所以在你上面的例子中, locationManager didUpdateToLocation fromLocation 没有被调用。

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

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

希望这可以帮助

于 2014-01-13T12:50:38.050 回答