如何在iOS上检测罗盘校准开关状态

时间:2012-12-05 15:02:35

标签: ios core-location cllocationmanager heading

我目前正在使用CLLocationManager,并希望了解设备的当前标题。到目前为止一切正常,功能实现,现在我尝试打磨我的应用程序。

如果用户将关闭用户设置标题中的compass calibration标记,则会出现一个极端情况,标题更新将不再发送到我的应用。在这种情况下,我想给用户一些反馈,他必须再次打开罗盘校准,否则我的应用程序将无法正常工作。

我发现,如果用户关闭我的应用的location services,我仍会收到磁性标题。但是如果用户关闭“罗盘校准”设置,我将不再收到更新的标题。但是,如何通过CoreLocation框架确定“罗盘校准”被关闭?

CLLocationManagerDelegate”通过

向我提供了更新
- (void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 

方法。但状态仅表示“位置服务”是否为我的应用程序处于活动状态。

我还试图通过

获得一些有效的信息
- (void)locationManager:(CLLocationManager*)manager didFailWithError:(NSError*)error

delegate方法,没有任何成功。

CoreLocation框架中是否有某些内容可以告诉我“罗盘校准”标志是打开/关闭的。

1 个答案:

答案 0 :(得分:5)

根据我的发现,如果关闭指南针校准,newHeading.trueHeading中的locationManager:didUpdateHeading:应为-1。这应该这样做:

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
    if(newHeading.trueHeading == -1)
        //Compass calibration is off provided location services are on for the app
}