Мне нужно восстановить ориентацию моего телефона. На данный момент я написал это:
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]
, которое представляет собой вращение на оси zed, как описано [здесь] [1], значение увеличивается, хотя вращения не было.
Кто-то знал, что происходит?
EDIT
Еще одна странная вещь ..
Я попробовал свое приложение в офисе на работе, и у него было странное поведение, которое я описал ранее ...
Я попробовал в том же офисе (та же самая ситуация) приложение компаса, которое я взял с рынка, и у меня такое же поведение ... Когда я переместил телефон вверх, значение изменилось последовательно ...
Я попробовал в том же офисе (та же самая ситуация) компас i-phone, и у него не было такого странного поведения!
Затем, когда я приехал домой, я попробовал оба, мое приложение и приложение компаса на моем телефоне с Android, и они работали !! даже если я перемещаюсь вверх по телефону, значение стабильно ...
Большое спасибо.
[1]: http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float[], float [])