電話の向きを取得する必要があります。現時点で私はこれを書いた:
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()){
case Sensor.TYPE_MAGNETIC_FIELD:
this.mag_vals = event.values.clone();
this.sensorReady = true;
break;
case Sensor.TYPE_ACCELEROMETER:
this.acc_vals = event.values.clone();
break;
}
if (this.mag_vals != null && this.acc_vals != null && this.sensorReady) {
this.sensorReady = false;
float[] R = new float[ProjectConstants.SIZE_MATRIX];
float[] I = new float[ProjectConstants.SIZE_MATRIX];
SensorManager.getRotationMatrix(R, I, this.acc_vals, this.mag_vals);
SensorManager.getOrientation(R, this.actual_orientation);
...
このコードを使用すると、電話を平らな面に置いたまま、表面上で回転させた場合に、電話の向きを取得できます。
私が理解していなかったのthis.actual_orientation[0]
は、[ここ] [1]で説明したように、電話をzed軸の回転であるの値を上に動かすと、回転がないのに値が増加する理由です。
誰かが何が起こるか知っていましたか?
編集
もう一つの奇妙なこと..
職場のオフィスでアプリケーションを試しましたが、前に説明した奇妙な動作がありました。同じオフィス(同じ状況)で、市場から入手したコンパスアプリを試しましたが、同じ動作をしています。電話を上に動かすと、値が一貫して変化しました。同じオフィス(同じ状況)でi-phoneコンパスを試しましたが、そのような奇妙な動作はありませんでした。
それから家に着いたら、Android携帯のアプリとコンパスアプリの両方を試してみましたが、動作しました!!携帯を上に動かしても値は安定しています...
どうもありがとう。
[1]:http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float []、float [])