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.

  • DialogFragment Orientación Cambiar el bloqueo con getActivity ()
  • ¿Cómo debo calcular el azimut, el tono, la orientación cuando mi dispositivo Android no es plano?
  • Cómo obtener el ancho de ventana correcto en el cambio de orientación para dispositivos Android, tabletas y móviles
  • Establecer la orientación para sólo 1 fragmento en mi actividad, mientras que el resto está en el retrato
  • Valores de sensor de orientación incoherentes en Android para azimut / guiñada y rollo
  • Android: varias preguntas de API de cámara
  • ¿Cómo cambiar la orientación de la pantalla de GENYMOTION?
  • OnConfigurationChanged no se llama la primera vez
  • Cómo utilizar SensorManager.getOrientation () en lugar de TYPE_ORIENTATION
  • Bloquear / desbloquear la orientación
  • Cuando cambio la orientación de retrato a paisaje mi resultado calculado está desapareciendo. Cómo resolverlo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.