Evita la rotación de la pantalla en Android

Tengo una de mis actividades que me gustaría evitar de girar porque estoy empezando un AsyncTask, y la rotación de la pantalla hace que se reinicie.

¿Hay alguna manera de decirle a esta actividad "NO ROTA la pantalla aunque el usuario esté sacudiendo su teléfono como loco"?

Añadir android:screenOrientation="portrait" al elemento <activity> en el manifiesto o en el landscape y ya está.

Puede seguir la lógica a continuación para evitar la rotación automática de la pantalla mientras se ejecuta su AsyncTask :

  1. Guarde su orientación de pantalla actual dentro de su actividad usando getRequestedOrientation() .
  2. Deshabilite la orientación automática de la pantalla mediante setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) .
  3. Ejecutar / ejecutar su AsyncTask .
  4. Al final de su AsyncTask restaure su estado de orientación anterior usando setRequestedOrientation(oldOrientation) .

Tenga en cuenta que hay varias maneras de acceder a las propiedades de Activity (que se ejecuta en el subproceso de UI) dentro de AsyncTask . Puede implementar su AsyncTask como una clase interna o puede utilizar el Activiy mensajes que poke su clase Activiy .

En su archivo de manifiesto, para cada actividad que desea bloquear la rotación de pantalla, agregue: si desea bloquearla en modo horizontal:

 <activity ... ... android:screenOrientation="landscape"> 

O si desea bloquearlo en modo vertical:

 <activity ... ... android:screenOrientation="portrait"> 

La manera más fácil que encontré para hacer esto era poner

 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Dentro de Creer, justo después

 setContentView(R.layout.activity_main); 

asi que…

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } 

Actividad.java

 @Override public void onConfigurationChanged(Configuration newConfig) { try { super.onConfigurationChanged(newConfig); if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { // land } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { // port } } catch (Exception ex) { } 

AndroidManifest.xml

  <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name="QRCodeActivity" android:label="@string/app_name" android:screenOrientation="landscape" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

En lugar de entrar en el AndroidManifest, podría hacer esto:

 screenOrientation = getResources().getConfiguration().orientation; getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); ... AsyncTask screenOrientation = getResources().getConfiguration().orientation; @Override protected void onPostExecute(String things) { context.setRequestedOrientation(PlayListFragment.screenOrientation); or context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); } 

El único inconveniente aquí es que requiere API de nivel 18 o superior. Así que, básicamente, esta es la punta de la lanza.

El siguiente atributo en la ACTIVIDAD en AndroidManifest.xml es todo lo que necesita:

 android:configChanges="orientation" 

Por lo tanto, el nodo de actividad completa sería:

 <activity android:name="Activity1" android:icon="@drawable/icon" android:label="App Name" android:excludeFromRecents="true" android:configChanges="orientation"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> 

Añadir:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); ... ... ... } 

Si está utilizando las herramientas para desarrolladores de Android (ADT) y Eclipse , puede ir a su AndroidManifest.xml -> ficha Aplicación -> bajar y seleccionar su actividad. Finalmente, seleccione su orientación preferida. Puede seleccionar una de las muchas opciones.

Debe agregar el siguiente código en el archivo manifest.xml. La actividad para la cual no debe girar, en esa actividad añadir este elemento

 android:screenOrientation="portrait" 

Entonces no girará.

  • ¿Cómo hacer una pausa de la rotación de la lona durante 2 segundos en ángulos específicos?
  • Cómo rotar un mapa de bits en Android acerca de imágenes de forma suave sin movimiento oscilatorio
  • Android, App se estrelló en la rotación de la pantalla con el diálogo abierto
  • Cómo rotar Bitmap sin crear uno nuevo?
  • Obtener rotación y mostrar en grados
  • Rotar una imagen varias veces pero mantener las esquinas alineadas
  • Cómo usar los datos del sensor onSensorChanged en combinación con OpenGL
  • Android rotar mapa de bits sin hacer una copia
  • Cómo iframe un video de youtube en HTML para teléfonos Android para poder ver y rotar a pantalla completa?
  • Cómo controla la orientación de la pantalla del dispositivo Android
  • Sprite Rotación en Android con Canvas.DrawBitmap. Estoy cerca, ¿qué estoy haciendo mal?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.