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.
- Servicio de Android> Actividad> Fragmento con ViewPager
- Problema de orientación de la cámara en Android
- Uso de giroscopio Android en lugar de acelerómetro. Encontré un montón de fragmentos, pero no hay código completo
- Orientación de la cámara en Android
- Android, ¿cómo no destruir la actividad cuando giro el dispositivo?
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
- Aplicación de Android que pierde datos durante el cambio de orientación
- Cómo hacer que el diseño de Android sea proporcional independientemente del tamaño de la pantalla y la orientación
- Evento del dispositivo Android onConfigurationChanged no controla la orientación
- Cómo obtener orientación del dispositivo Android
- Descripción de la orientación del teléfono Android, incluida la brújula
- ¿Cómo registrar un oyente para el cambio de orientación?
- ¿Cómo conservar la instancia de fragmento de fragmento de reproducción de vídeo después de un cambio de orientación?
- ¿El error de AdView causó que todas las vistas de la Web dejen de cargarse cuando cambia la orientación y se están ejecutando múltiples subprocesos?
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.