2

我有一个使用标题的简单 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;
}

我应该怎么做才能获得指南针校准?谢谢。

4

2 回答 2

2

苹果官方文档:

Core Location 可能会调用此方法来校准用于确定航向值的板载硬件。通常,Core Location 在以下时间调用此方法:

首次请求航向更新

当核心位置观察到观察到的磁场的幅度或倾斜度发生显着变化时

因此,完全有可能您的校准已经很好并且不需要设置。请注意,此方法永远不会在模拟器中被调用。

尝试将 MKMapView 与 MKUserTrackingMode.FollowWithHeading 一起使用,看看是否出现校准窗口。您的委托可能仍然没有被调用,因为 MKMapView 通过它自己的私有位置管理器委托调用它。

您也可以尝试在设备上的“设置”->“定位服务”->“系统服务”中关闭指南针校准。

于 2015-05-31T10:27:46.250 回答
0
  1. see CLLocationManager requestAlwaysAuthorization method

  2. add required keys to your info.plist file (now required)

    NSLocationAlwaysUsageDescription bla bla why we use GPS. NSLocationWhenInUseUsageDescription bla bla why we use GPS.

  3. must be setup on main UI thread !!

于 2015-02-09T04:30:19.457 回答