La orientación del dispositivo Android es Paisaje, pero los sensores se comportan como si la orientación fuera Retrato

Tengo un problema con la orientación en android. La orientación del dispositivo es el paisaje que he establecido en el archivo AndroidManifest.xml.

android:screenOrientation="landscape" 

También tengo el dispositivo en el paisaje, por lo que todo (diseños, vistas, etc) está en modo de paisaje como yo quería que sea. Pero sólo cuando tengo el dispositivo en el retrato que me da los valores que necesito.

He modificado un código de Internet y funciona para HTC 3D EVO, Nexus 7 y Samsung Galaxy S3, pero no en Galaxy Tablet 10 ".

He encontrado este post. Sensor de orientación Android diferente para diferentes dispositivos? La respuesta aceptada sugiere el uso de métodos getRotation () y remapCoordinateSystem (), pero no menciona cómo hacerlo.

Así es como he terminado.

  SensorManager.getRotationMatrix(Rmat, Imat, gData, mData); SensorManager.remapCoordinateSystem(Rmat, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, R2); // Orientation isn't as useful as a rotation matrix, but // we'll show it here anyway. SensorManager.getOrientation(R2, orientation); float incl = SensorManager.getInclination(Imat); FontTextView pitchText = (FontTextView)findViewById(R.id.pitch_text); if((int)(orientation[1]*90) <= -110 && !newQuestionIsActive) { newQuestionIsActive = true; pitchText.setText("Bring new question"); } else if(Math.abs((int)(orientation[2]*90)) <= 200 && (int)(orientation[1]*90) >= -30 && newQuestionIsActive) { newQuestionIsActive = false; pitchText.setText("Not Correct!"); } else if(Math.abs((int)(orientation[2]*90)) > 200 && (int)(orientation[1]*90) >= -30 && newQuestionIsActive) { newQuestionIsActive = false; pitchText.setText("Congratulations!"); } 

Ahora, ¿cómo se supone que debo hacer uso de getRotation () en este código? Y puede ser una breve explicación sería apreciado por qué los mencionados 3 dispositivos funcionan bien, pero no la Tablet Galaxy.

Acerca de este problema android documentación dice;

Por último, si su aplicación coincide con los datos del sensor con la visualización en pantalla, debe utilizar el método getRotation () para determinar la rotación de la pantalla y, a continuación, utilizar el método remapCoordinateSystem () para asignar las coordenadas del sensor a las coordenadas de la pantalla. Debe hacer esto incluso si su manifiesto especifica la visualización sólo de retrato.

Http://android-developers.blogspot.com/2010/09/one-screen-turn-deserves-another.html

Encontré la solución.

El problema es causado por la orientación predeterminada de algunos dispositivos más nuevos que se establece en el paisaje mientras que el retrato de los demás. Así que el administrador de sensores se comporta en consecuencia. Para que el gestor de sensores funcione de la manera que usted espera, necesita detectar la defaultDisplayRotation del dispositivo y cambiar la lógica del parámetro remapCoordinateSystem ().

he cambiado

 SensorManager.remapCoordinateSystem(Rmat, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, R2); 

a

 int rotation = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation(); if(rotation == 0) // Default display rotation is portrait SensorManager.remapCoordinateSystem(Rmat, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_Y, R2); else // Default display rotation is landscape SensorManager.remapCoordinateSystem(Rmat, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, R2); 

Ahora funciona … Espero que esto sea útil para alguien más!

No sé acerca de tu camino. Pero la siguiente manera funciona para mí.

 int orientation = getResources().getConfiguration().orientation; 

Aquí la orientation es 1 si el dispositivo está en el landscape y 2 si el dispositivo está en el modo portrait .

Espero que esto ayude.

  • La aplicación se bloquea después de cambiar la orientación de la pantalla
  • Android VideoView no se reproduce Orientación de retrato
  • Sistema de coordenadas del dispositivo Android Convert a sistema de coordenadas "usuario"
  • Administrar el diseño dentro de un radiogrupo horizontal orientado
  • Android: orientación / rotación de la pantalla para la vista previa de la cámara
  • Orientación de Android AR
  • Android: ancho y alto de la vista después del cambio de orientación
  • OnOrientationChanged () se llama cuando OrientationEventListener está deshabilitado
  • ¿La aplicación de Android restablece el cambio de orientación, la mejor manera de manejar?
  • Cómo utilizar SensorManager.getOrientation () en lugar de TYPE_ORIENTATION
  • Cómo habilitar sólo retratos y retratos en los teléfonos, "sensorPortrait" no funciona en los teléfonos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.