CLLocationManager trueHeading is -1

I am facing issue in using CLLocationManager.

I am using startUpdatingLocation method and its delegate method

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading

I am gettings newHeading.trueHeading.

The problem is some of the times newHeading.trueHeading returns -1 and once device start returing -1 it remains the same, means it always returns -1.

Can anyone tell me the technical details of this problem and workaround to fix it.

While exploring Apple's document i found

"A negative value means that the reported heading is invalid, which can occur when the device is uncalibrated or there is strong interference from local magnetic fields."

But no information how to avoid or workaround.

Note: I am testing this app on real devices iPhone 4, iPhone 4S, iPad 2 and iPad 3.

But no information how to avoid or workaround.

In that case iOS would like to display a calibration dialog, if you do not suppress this dialog. The heading becomes valid once the user calibrated the device by making a figure 8 motion.

If this cannot work because there are permanent strong magnetic fields, like inside a car, then there is simply no chance to get a magnetic heading.

In that case you may consider using location.course from location manger which gives the direction which the user moves, measured by GPS.

CLLocationmanager Heading is not w…, return;. // Use the true heading if it is valid. CLLocationDirection theHeading = (( newHeading.trueHeading > 0) ? newHeading.trueHeading :� TrueHeading: The heading, relative to true North, in degrees. X: The geomagnetic signal, in microteslas, along the X axis. Y: The geomagnetic signal, in microteslas, along the Y axis. Z: The geomagnetic signal, in microteslas, along the Z axis. Zone (Inherited from NSObject)

You can retrieve raw magnetic values along the X,Y and Z axes with CLHeading properties. These value are measured in microteslas and normalized into range that Apple states is -128 to 128. Each axis value represents an offset from the magnetic field lines tracked by the device's built in magnetometer.

See this link for More Information.. books

i hope this will be helpful to you...

Heading and Course - Programming iOS 4 [Book], CLLocationManager* lm = [[CLLocationManager alloc] init]; self.locman = lm; [lm the true heading ( trueHeading ) because, as the documentation explains, the� Heading and Course For appropriately equipped devices, Core Location also supports use of the magnetometer to determine which way the device is facing (its heading) and the GPS to … - Selection from Programming iOS 4 [Book]

If you are finding that .magneticHeading has a valid heading (0 to 360) but .trueheading has invalid value (-1) then this usually means that the user has switched OFF the following setting:

Privacy / Location / System Services / Compass Calibration

Switching this back ON remedies the problem.

You can also check Apple's compass app Settings to see if it has the "Use True North" setting enabled or not. When the Compass Calibration setting is disabled, then this setting is also disabled.

Alas, Apple does not provide any means to test for this other than to observe that magnetic heading is available and true heading is not, and to then assume that this must be because the user has disabled the compass calibration setting.

CoreLocation, Once configured, the location manager must be "started" for iOS 8, specific user level permission is required, "when-in-use" authorization grants� Core Location •Core Location is the framework that provides access to location-based services •Core Location consists of several classes, protocols and enums •CLLocationManager — class which does the lookups

Xcode 6 why CLLocationManager didn't return latitude and , trueHeading is providing. But mostly I found this - (void)locationManager:( CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading for� Declaration; From: @property (nonatomic, assign) id<CLLocationManagerDelegate> delegate: To: @property (nonatomic, weak) id<CLLocationManagerDelegate> delegate

CLLocationManager.RegionLeft Event (CoreLocation), trueHeading. The heading (measured in degrees) relative to true North. (read- only) @property(readonly, nonatomic) CLLocationDirection trueHeading. Note. This initializer is intended for CLLocation objects created using the CLLocation.init(latitude:longitude:) initializer. If you intend to use a CLLocation object obtained from a CLLocationManager object, consider increasing the horizontalAccuracy or set it to a negative value to avoid overfitting, since the Waypoint class’s coordinateAccuracy property represents the maximum allowed

Gps heading iOS - objective-c - javascript, trueHeading. Added CLHeading.headingAccuracy Added +[ CLLocationManager headingAvailable] Added -[CLLocationManager startUpdatingHeading]. Вычисление заголовка компаса для определенной координаты вместо северного. Я не могу правильно использовать этот алгоритм.

Comments
  • Now I am using delegate method locationManagerShouldDisplayHeadingCalibration. Is implementing this and showing user calibrating screen is enough to solve this problem? Is this the stand way of tackling this issue?
  • how does this answer the OP question?
  • @AlexWien here i just give some info which i got and also i have one link which describe some information about CLHeading so i post this answer with its link...