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.

Rajarshi Das
  • 11,778
  • 6
  • 46
  • 74
Alathink
  • 263
  • 1
  • 3
  • 11

1 Answers1

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
}
Rick
  • 3,240
  • 2
  • 29
  • 53
  • 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. – Ethan Holshouser Jan 06 '15 at 02:25
  • But note that trueHeading is also -1 during startup for a while, even while compass calibration is turned on. – fishinear May 04 '18 at 19:39