How to detect compass calibration switch state on iOS
Asked Answered
R

1

10

I am currently working with the CLLocationManager and want to get informed about the current heading of the device. So far everything works fine, features are implemented and now i try to polish my app.

There is a corner case, if the user will turn off the compass calibration flag in the user settings heading updates will not be send any more to my app. In such a case I want to give the user some feedback, that he has to turn on compass calibration again otherwise my app will not work.

I figured out that in case of the user turns off the location services for my app I will still receive magnetic heading. But if the "compass calibration" setting will be turned of by the user I will not receive any longer heading updates. But how can i identify through the CoreLocation framework that "compass calibration" was turned off?

The "CLLocationManagerDelegate" gives me an update through the

- (void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 

method. But the status indicates only if the "location services" is in-/active for my app.

I also tried to get some valid informations through the

- (void)locationManager:(CLLocationManager*)manager didFailWithError:(NSError*)error

delegate method, without any success.

Is there something in the CoreLocation framework that can tell me if "compass calibration" flag is turned on/off.

Rhymester answered 5/12, 2012 at 15:2 Comment(1)
Have you ever found an answer for this?Arroyo
O
6

From what I've found, newHeading.trueHeading in locationManager:didUpdateHeading: should be -1 if compass calibration is turned off. This should do it:

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
    if(newHeading.trueHeading == -1)
        //Compass calibration is off provided location services are on for the app
}
Orjonikidze answered 4/1, 2015 at 17:52 Comment(2)
Thank you! This is exactly what I needed. I am not using the heading directly in my app (I am using Core Motion) so I hadn't even implemented the didUpdateHeading method and did not look at the corresponding documentation as carefully as I should.Sectional
But note that trueHeading is also -1 during startup for a while, even while compass calibration is turned on.Copyboy

© 2022 - 2024 — McMap. All rights reserved.