Как определить состояние переключателя калибровки компаса на iOS

В настоящее время я работаю с CLLocationManager и хочу получать информацию о текущем заголовке устройства. Пока все работает нормально, функции реализованы, и теперь я пытаюсь отшлифовать свое приложение.

Есть крайний случай, если пользователь выключит флаг compass calibration в заголовке пользовательских настроек, обновления больше не будут отправляться в мое приложение. В таком случае я хочу сообщить пользователю, что он должен снова включить калибровку компаса, иначе мое приложение не будет работать.

Я понял, что если пользователь отключит location services для моего приложения, я все равно получу магнитный заголовок. Но если пользователь отключит настройку «калибровка компаса», я больше не буду получать обновления заголовков. Но как я могу определить через структуру CoreLocation, что «калибровка компаса» была отключена?

"CLLocationManagerDelegate" дает мне обновление через

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

метод. Но статус указывает только на то, что «службы определения местоположения» неактивны/активны для моего приложения.

Я также пытался получить достоверную информацию через

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

delegate безуспешно.

Есть ли что-то в структуре CoreLocation, что может сказать мне, включен ли флаг "калибровка компаса"?


person Alathink    schedule 05.12.2012    source источник
comment
Вы когда-нибудь находили ответ на это?   -  person Valerio Santinelli    schedule 07.08.2014


Ответы (1)


Из того, что я нашел, 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
}
person Rick    schedule 04.01.2015
comment
Спасибо! Это именно то, что мне нужно. Я не использую заголовок непосредственно в своем приложении (я использую Core Motion), поэтому я даже не реализовал метод didUpdateHeading и не просматривал соответствующую документацию так внимательно, как следовало бы. - person Ethan Holshouser; 06.01.2015
comment
Но обратите внимание, что trueHeading также некоторое время равен -1 во время запуска, даже если калибровка компаса включена. - person fishinear; 04.05.2018