Android Sensor.TYPE_ORIENTATION работает отлично, и я не могу получить такие же результаты с акселерометром и магнитометром

Я пытаюсь использовать эту неустаревшую версию кода, чтобы получить ориентацию. Однако я не могу заставить его работать так гладко и идеально, как если бы я просто использовал устаревший Sensor.TYPE_ORIENTATION. Я что-то упускаю?

//СТАРЫЙ

@Override
public void onSensorChanged(SensorEvent arg0) {
    m_lastYaw = arg0.values[0];
    invalidate();
}

//НОВЫЙ

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE){
        return;
    }

    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        System.arraycopy(event.values, 0, m_lastAccels, 0, 3);
    }
    if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        System.arraycopy(event.values, 0, m_lastMagFields, 0, 3);
    }

    if (SensorManager.getRotationMatrix(m_rotationMatrix, null, m_lastAccels, m_lastMagFields)) {
        SensorManager.getOrientation(m_rotationMatrix, m_orientation); 

        m_lastYaw = (float)Math.toDegrees(m_orientation[0]);
        invalidate();
    }
}

person Héctor Júdez Sapena    schedule 31.07.2012    source источник
comment
вы не должны отклонять значения SensorManager.SENSOR_STATUS_UNRELIABLE, потому что на некоторых недорогих устройствах это единственные значения, которые вы получите (и эти значения действительно можно использовать в моих тестах)   -  person mmathieum    schedule 02.07.2013


Ответы (1)


Я использовал код, который я представил здесь, и он работал хорошо, только когда телефон (Samsung Galaxy S3) лежал горизонтально. Но это только начало: это не работает лучше, чем Sensor.TYPE_ORIENTATION, и не хуже.

person felixd    schedule 30.12.2013