Android - SensorManager странное поведение getOrientation

Я должен получить ориентацию своего телефона. В данный момент я записал это:

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], повышения стоимости, хотя не было никакого вращения.

Кто-то знал то, что происходит?

Править

Другая странная вещь..

Я попробовал свое приложение в офисе на работе, и это имело странное поведение, которое я описал прежде.. Я попробовал в том же офисе (та же ситуация) приложение для компаса, которое я взял с рынка, и это имеет то же мое поведение.. когда я переместил телефон вверх значение, изменяемое последовательно.. Я попробовал в том же офисе (та же ситуация) компас iPhone, и это не имело того странного поведения!

Затем, когда я прибыл дома, я попробовал обоих, мое приложение и приложение компаса для моего телефона на базе Android, и они работали!! даже если я перемещаю вверх телефон, значение стабильно...

Большое спасибо.

[1]: http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation (плавание [], плавание [])

5
задан hara 7 July 2010 в 17:24
поделиться