2012-12-05 21 views
9

現在、CLLocationManagerと一緒に作業しており、デバイスの現在の見出しについて知りたいと思っています。これまでのところすべて正常に動作し、機能が実装され、今では私のアプリを磨くようにしています。iOSでコンパスのキャリブレーションスイッチの状態を検出する方法

コーナーケースがあります。ユーザがユーザ設定のcompass calibrationフラグをオフにすると、見出しのアップデートは私のアプリケーションに送信されなくなります。そのような場合、私はユーザーにいくつかのフィードバックを与えたいと思います。コンパスのキャリブレーションをもう一度オンにしなければ、アプリは動作しません。

ユーザーが私のアプリのlocation servicesをオフにした場合、私はまだ磁気見出しを受け取ることに気付きました。しかし、「コンパス校正」の設定がユーザーによって有効にされた場合、私はもはや見出し更新を受信しません。しかし、私はどのようにしてCoreLocationフレームワークで "コンパス較正"がオフになっているかを特定できますか?

"CLLocationManagerDelegateは、" 私に

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

メソッドを通じてアップデートを提供します。しかし、ステータスは、「ロケーションサービス」が自分のアプリにイン/アクティブである場合にのみ表示されます。

私はまた、任意の成功なし

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

delegate方法を通じて、いくつかの有効な情報を取得しようとしました。

CoreLocationフレームワークには、「コンパス較正」フラグがオン/オフになっているかどうかが分かります。

+1

この回答はこれまでに見つかりましたか? –

答えて

4

コンパスのキャリブレーションがオフの場合、newHeading.trueHeadinglocationManager: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 
} 
+0

ありがとう!これはまさに私が必要としていたものです。私はアプリケーションで直接見出しを使用していません(私はCore Motionを使用しています)ので、 'didUpdateHeading'メソッドを実装していなくても、対応するドキュメントを慎重に見なければなりません。 –

+0

私は助けることができる嬉しい:) – Rick

関連する問題