2012-01-04 11 views
10

Android用のコンパスの例を探しています。私がする必要があるのは、正しい姿勢(肖像画&ランドスケープモード)を得ることだけです。Androidコンパスの例

私はすでにいくつかは、Sensor.TYPE_ACCELEROMETER & Sensor.TYPE_MAGNETIC_FIELDの組み合わせを使用して、いくつかのサンプル、いくつかの使用のみSensor.TYPE_ORIENTATIONを見つけました。

Android 1.6 - 4.0と言うと、ベアリングを取得するのが正しい&一般的な方法はどちらですか?

答えて

19

Sensor.TYPE_ORIENTATIONは推奨されていません。

ドキュメントには、代わりにSensorManager.getOrientation()を使用する必要があります。

だから、Sensor.TYPE_ACCELEROMETERからだけでなく、Sensor.TYPE_MAGNETIC_FIELDから読み取る必要があり、その後、あなたの携帯電話の向きを返しますどのSensorManager.getRotationMatrix()を呼び出し、最後にSensorManager.getOrientation()

この図が表示されている場合は、携帯電話の向きを取得するのは簡単です。これは恐らくあなたの2番目の例がしているものですが、あなたが私にそれが何であるかを示さなかったので私は知らない。

+4

申し訳ありません私は例を添付することを忘れていました:http://www.codingforandroid.com/2011/01/using-orientation-sensors-simple.htmlこれは正しい方法ですか? – nr1

+0

そのリンクの内容は正しく表示されます – Dan

+0

明らかにデータの使い方はあなた次第です。onSensorChangedは面白い数学がある場所です。 – Dan

0

Sensor.TYPE_ACCELEROMETERSensor.TYPE_MAGNETIC_FIELDSensorManager.getOrientation()の組み合わせを使用しても、正確な値は得られません。推奨されないメソッドSensor.TYPE_ORIENTATIONはうまくいきます。 :)

+3

コードを修正してください。コードサンプルが正常に動作しているようです(http://www.codingforandroid.com/2011/01/using-orientation-sensors-simple.html gezdyのコメントとペアになっています) – Vaiden

+1

また、デバイスを再調整する必要があります – Vaiden

5

彼のサンプルコードのDanに感謝します。このdiscussionに応じevent.values.clone()に変更event.values

は、しかし、単に少し補正あります。
これは私のためにこの変更後に動作します。