我有一个使用标题的简单iOS应用程序。然而,由于精度非常差(10到25度),我实现了locationManagerShouldDisplayHeadingCalibration功能。然而它永远不会被称为。这是我的代码:
...
locmanager = [CLLocationManager new];
[locmanager setDelegate:self];
[locmanager setDesiredAccuracy:kCLLocationAccuracyBest];
[locmanager setHeadingFilter:kCLHeadingFilterNone];
[locmanager setHeadingOrientation:CLDeviceOrientationLandscapeLeft|CLDeviceOrientationLandscapeRight];
if ([CLLocationManager locationServicesEnabled])
{
[locmanager startUpdatingLocation];
[locmanager startUpdatingHeading];
}
...
- (void)locationManager:(CLLocationManager*)manager didUpdateHeading:(CLHeading*)newHeading
{
// This one gets called
}
- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager
{
// This one does NOT get called
NSLog ("Here");
return YES;
}
我该怎么做罗盘校准?感谢。
答案 0 :(得分:2)
Apple官方文档:
核心位置可以调用此方法以努力校准用于确定航向值的板载硬件。通常,Core Location会在以下时间调用此方法:
首次要求更新标题
当核心位置观察到观察到的磁场的幅度或倾斜度发生显着变化时
因此,完全有可能您的校准已经很好并且无需设置。请注意,此方法永远不会在模拟器中调用。
尝试将MKMapView与MKUserTrackingMode.FollowWithHeading一起使用,看看是否出现校准窗口。您的委托可能仍未被调用,因为MKMapView通过它自己的私有位置管理器委托来调用它。
您也可以尝试在设置中关闭指南针校准 - >位置服务 - >您设备上的系统服务。
答案 1 :(得分:0)
请参阅CLLocationManager
requestAlwaysAuthorization
方法
将所需的密钥添加到 info.plist 文件中(现在需要)
NSLocationAlwaysUsageDescription bla bla为什么我们使用GPS。 NSLocationWhenInUseUsageDescription bla bla为什么我们使用GPS。
!!