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

Hay una manera de decirle a esta actividad «NO GIRE la pantalla, incluso si el usuario está sacudiendo su teléfono como un loco»?

  • stackoverflow.com/questions/1512045/…
  • Usted puede lidiar con la orientación de la pantalla cambie y AsyncTasks. La prevención de la orientación de la pantalla cambia es sólo un vago solución. Y no es difícil mantener una AsyncTask vivo a través de los cambios de orientación 🙂
  • clamernotes.blogspot.com/2011/04/…
  • Sería mucho más útil para ofrecer una solución o algún código, Romain, en lugar de afirmar «existe una solución y no es difícil».
  • usted puede utilizar setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
InformationsquelleAutor Sephy | 2010-04-28

14 Comentarios

  1. 439

    Agregar

    android:screenOrientation="portrait" 

    o

     android:screenOrientation="landscape" 

    a la <activity> elemento/s en
    el manifiesto y listo.

    • Tenga en cuenta que esto es sólo la ocultación de un error en su aplicación, lo que es menos probable que los usuarios de paso. Pero ellos todavía. Cualquier cambio de la configuración puede causar que su actividad se reinicie. Usted realmente necesita para escribir su actividad correctamente para lidiar con la tarea asíncrona como se reinicia.
    • Esto no funciona para mí en uno de los casos. Yo tenía la pantalla a horizontal antes de abrir la aplicación. Cuando me abre la aplicación, la pantalla girar a vertical y causó una segunda llamada a asynctask.
    • Usted necesita para poner las cosas en «abrir en modo de retrato» Y «siempre permanecer en el modo de retrato». Haciendo solo 1 es inútil.
    • Mi Dios gracias!!! he estado enferma de los nervios de mi cerebro durante la rotación de la pantalla problemas cuando se utiliza MediaRecorder debido a la rotación de la pantalla hace que el requerido SurfaceView a ser perdidos, que rompe la tarea de grabación. Forzando a la orientación de la pantalla se soluciona mi problema…esto después de que después de probar MUCHOS otros hacks … no puedo creer que no he encontrado esta solución hasta ahora jaja. Saludos, de verdad.
    • independientemente, este es el número #1 de google golpe para la «aplicación de android de evitar la rotación de la pantalla,» mi necesidad no tiene nada que ver con las tareas de async
    • ¿Cómo podemos entonces escribir nuestra actividad correctamente para lidiar con este problema?
    • Como @Sara señala que usted necesita para agregar esto a la <actividad> etiqueta para cada actividad que desea bloquear en lugar de a la <aplicaciones> etiqueta.
    • Esta no es la respuesta correcta. ¿Qué pasa si uno quiere que su actividad no girar en cualquier situación, independientemente de que se abrió inicialmente en cada retrato/paisaje modos.

  2. 124

    Puede seguir la lógica de abajo para evitar la rotación automática de la pantalla mientras su AsyncTask se está ejecutando:

    1. Tienda de su actual orientación de la pantalla dentro de su actividad utilizando getRequestedOrientation().
    2. Desactivar la asignación automática de la orientación de la pantalla utilizando setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR).
    3. Ejecutar/ejecutar su AsyncTask.
    4. Al final de su AsyncTask restaurar su anterior orientación del estado mediante setRequestedOrientation(oldOrientation).

    Por favor, tenga en cuenta que hay varias maneras de acceder a Activity (que se ejecuta en el subproceso de interfaz de usuario) de las propiedades dentro de un AsyncTask. Usted puede implementar su AsyncTask como una clase interna o usted puede utilizar el mensaje de Manipulador que meter la Activiy clase.

    • Definitivamente el camino a seguir.
    • Mucho mejor que la respuesta seleccionada.
    • gran idea 🙂 usted no tiene la tienda de su actual orientación de la pantalla puede utilizar ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
    • Esto parece increíble, @emre, gracias! Parece «Demasiado bueno para ser verdad!» cuenta de la enorme cantidad de discusión sobre el tema: stackoverflow.com/q/3821423/294884 … expertos de android, hay alguna desventaja aquí?! Gracias de nuevo .. por lo tanto.
    • Mierda!! Este NO funciona si el dispositivo pasa a COMENZAR EN el MODO de PAISAJE. Lo que el infierno! Sux :O
    • Este código no funciona en ciertos casos. E. g. si el usuario ha cambiado su orientación entre el inicio de su AsyncTask y el final de la misma. Se habría salvado y restaurado la orientación incorrecta, entonces.
    • No es muy bueno ni profesional!

  3. 26

    En el archivo de Manifiesto, para cada Actividad que se desea bloquear la rotación de la pantalla agregar: si desea bloquear en el modo horizontal:

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

    o si desea bloquear en modo vertical:

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

    La forma más fácil que he encontrado para hacer esto era poner

    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    dentro de onCreate, justo después de

    setContentView(R.layout.activity_main);

    así que…

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

    Activity.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>
  6. 5

    En lugar de ir en el AndroidManifest, sólo podí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 es que se necesita a nivel de la API de 18 años o mayor. Así que, básicamente, esta es la punta de la lanza.

    • Esta parte es la desactivación de la casa y el botón de aplicaciones recientes y aún después de la liberación de bloqueo con SCREEN_ORIENTATION_FULL_SENSOR, en estado deshabilitado. En Android N.
  7. 2

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

    android:configChanges="orientation"

    Así, la actividad completa nodo 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>
  8. 1

    Agregar:

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

    Añada lo siguiente a su AndroidManifest.xml

    [ app > src > principal > AndroidManifest.xml ]

    <activity android:name=".MainActivity"
              android:configChanges="orientation"
              android:screenOrientation="portrait"/>

    Ejemplo:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx.zzzzzz.yyyyy">
    
       <uses-permission android:name="A-PERMISSION" />
    
       <application>
          <activity android:name=".MainActivity"
                    android:screenOrientation="portrait"
                    android:configChanges="orientation">
          </activity>
       </application>
    
    </manifest>
  10. 0

    Si usted está usando Android Developer Tools (ADT) y Eclipse
    usted puede ir a su AndroidManifest.xml –> Aplicación ficha –> ir hacia abajo y seleccione su actividad. Por último, seleccione la orientación que prefiera.
    Puede seleccionar una de las muchas opciones.

  11. 0

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

    android:screenOrientation="portrait"

    Entonces no va a rotar.

  12. 0

    Usted puede tratar de Esta manera

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itclanbd.spaceusers">
    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Login_Activity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

  13. 0

    Uso AsyncTaskLoader para mantener sus datos seguros, incluso si los cambios de actividad, en lugar de utilizar AsyncTask que es una mejor manera de construir aplicaciones de la prevención de la rotación de la pantalla.

  14. 0

    Evitar la Rotación de la Pantalla sólo tiene que añadir esta línea siguiente en sus Manifiestos.

    <activity
            android:name=".YourActivity"
            android:screenOrientation="portrait" />

    Esto funciona para mí.

Dejar respuesta

Please enter your comment!
Please enter your name here