我目前正在使用CLLocationManager
,并希望了解设备的当前标题。到目前为止一切正常,功能实现,现在我尝试打磨我的应用程序。
如果用户将关闭用户设置标题中的compass calibration
标记,则会出现一个极端情况,标题更新将不再发送到我的应用。在这种情况下,我想给用户一些反馈,他必须再次打开罗盘校准,否则我的应用程序将无法正常工作。
我发现,如果用户关闭我的应用的location services
,我仍会收到磁性标题。但是如果用户关闭“罗盘校准”设置,我将不再收到更新的标题。但是,如何通过CoreLocation
框架确定“罗盘校准”被关闭?
“CLLocationManagerDelegate
”通过
- (void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
方法。但状态仅表示“位置服务”是否为我的应用程序处于活动状态。
我还试图通过
获得一些有效的信息- (void)locationManager:(CLLocationManager*)manager didFailWithError:(NSError*)error
delegate
方法,没有任何成功。
CoreLocation
框架中是否有某些内容可以告诉我“罗盘校准”标志是打开/关闭的。
答案 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
}