¿Cuál es la alternativa al sensor de orientación de Android?

Hola, estoy construyendo un juego 3D para Android.

Actualmente estoy tratando de agregar un sensor a mi juego que permite al jugador inclinar el android como sus controles.

Idealmente, me gustaría utilizar el sensor ORIENTATION, pero noté que ha quedado obsoleto. ¿Alguien sabe cómo detectar la inclinación en el Android y no usa este sensor?

No hay un sensor de “orientación” real: este es (era) en realidad un sensor compuesto, generado a partir de una combinación del acelerómetro y el magnómetro.

Desde http://developer.android.com/reference/android/hardware/SensorEvent.html

“Este tipo de sensor existe por razones heredadas, utilice getRotationMatrix () junto con remapCoordinateSystem () y getOrientation () para calcular estos valores en su lugar”.

public class OrientationTestActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mAccelerometer; private Sensor mMagnetometer; private float[] mLastAccelerometer = new float[3]; private float[] mLastMagnetometer = new float[3]; private boolean mLastAccelerometerSet = false; private boolean mLastMagnetometerSet = false; private float[] mR = new float[9]; private float[] mOrientation = new float[3]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); } protected void onResume() { super.onResume(); mLastAccelerometerSet = false; mLastMagnetometerSet = false; mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_NORMAL); } protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); } public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { if (event.sensor == mAccelerometer) { System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length); mLastAccelerometerSet = true; } else if (event.sensor == mMagnetometer) { System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length); mLastMagnetometerSet = true; } if (mLastAccelerometerSet && mLastMagnetometerSet) { SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer); SensorManager.getOrientation(mR, mOrientation); Log.i("OrientationTestActivity", String.format("Orientation: %f, %f, %f", mOrientation[0], mOrientation[1], mOrientation[2])); } } }