Deshabilitar y habilitar cambios de orientación en una actividad en Android mediante programación

Tengo una aplicación que hace un poco de personal de fondo. Cuando el trabajo de fondo se está ejecutando un círculo de progreso se muestra, si el dispositivo se gira durante este tiempo, a continuación, la actividad es "restablecer" y quiero evitar eso.

Por esta razón decidí desactivar la orientación durante este proceso. He visto diferentes hilos para esta pregunta, pero ninguno con una solución válida, al menos en mi caso.

Las soluciones publicadas son sobre la fijación de la orientación de la actividad, pero usted tiene que lidiar con el hecho de que las orientaciones REVERSE no se devuelven si se utiliza:

getResources().getConfiguration().orientation 

La función anterior devuelve SCREEN_ORIENTATION_PORTRAIT tanto para los casos PORTRAIT como REVERSE_PORTRAIT (al menos en mis pruebas).

Así que al final he utilizado el valor de rotación para hacer frente a eso, por lo que mi código "desactivar la rotación" es:

 int rotation = getWindowManager().getDefaultDisplay().getRotation(); switch(rotation) { case Surface.ROTATION_180: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); break; case Surface.ROTATION_270: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); break; case Surface.ROTATION_0: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; case Surface.ROTATION_90: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; } 

Y para permitir de nuevo la orientación:

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

Eso funciona perfectamente en un dispositivo con Android 4.1.2, pero en un dispositivo con Android 4.2.1 no está funcionando como se esperaba.

Supongo que la gestión de la rotación en el ciclo de actividad en vivo debe ser un problema común, pero no he sido capaz de encontrar una solución adecuada. Puede ser que estoy buscando a la dirección equivocada por lo que cualquier ayuda es realmente bienvenida.

Gracias de antemano, Iván.

Si desea desactivar los cambios de orientación del teléfono, puede utilizar este código en el manifiesto

 <activity android:name=".class_name" 

// si desea que su pantalla en

 android:screenOrientation="portrait" > 

// si desea que la pantalla en modo horizontal

 android:screenOrientation="landscape" > 

Y si desea que su teléfono cambie de orientación pero evite que se reinicie el proceso, puede utilizar el método onConfigurationChanged en su clase:

 @Override public void onConfigurationChanged(Configuration newConfig) { // ignore orientation change if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) { super.onConfigurationChanged(newConfig); } } 

Prueba esto..

No hay ningún error en su código. Es correcto lo revisé. Utilice ese código en onConfigurationChanged que puede dar la diferencia y otra cosa es usar debajo del código para deshabilitar el restablecimiento de la actividad.

 <activity android:name="YourActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:windowSoftInputMode="adjustPan"/> 

Podría anular el método on onConfiguratoinChanged para inhabilitar los cambios de orientación:

 @Override public void onConfigurationChanged(Configuration newConfig) { // ignore orientation change if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) { super.onConfigurationChanged(newConfig); } } 

No olvide activar la orientación cambiada de escucha en su archivo AndroidManifest.xml:

 <activity android:configChanges="orientation" > 

Simple: una línea para agregar después de Nombre de actividad en android manifiesto

 android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale 

Esto funcionó para mí.

  • Rajawali cámara giratoria con Sensor.TYPE_ROTATION_VECTOR comportamiento extraño
  • Cómo actualizar match_parent en un linearLayout después de usar setRotation?
  • Cómo girar un drawable con anti-aliasing habilitado
  • Girar rápidamente el teléfono 180 grados, la vista previa de la cámara gira al revés
  • Android: obtiene la orientación del dispositivo desde Azimuth, roll y pitch
  • Imagen giratoria. Animación de la lista o rotación animada? (Androide)
  • Box2D rotar un objeto, ¿cómo?
  • Cómo manejar la rotación con Retrofit y RxJava / RxAndroid en Actividad?
  • Zoom de Android y rotación de la vista de imagen
  • LibGDX texturepacker rotación
  • Cómo hacer menú giratorio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.