Я пытаюсь использовать эту неустаревшую версию кода, чтобы получить ориентацию. Однако я не могу заставить его работать так гладко и идеально, как если бы я просто использовал устаревший 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();
}
}
SensorManager.SENSOR_STATUS_UNRELIABLE
, потому что на некоторых недорогих устройствах это единственные значения, которые вы получите (и эти значения действительно можно использовать в моих тестах) - person mmathieum   schedule 02.07.2013