Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android: orientación manual de la pantalla sin reiniciar la actividad?

Tengo que hacer una aplicación de vídeo con un botón para la pantalla completa en el video. El botón se utiliza para cambiar manualmente entre el modo horizontal y vertical de la pantalla de vídeo. No queremos que se detecte la rotación automática. Por lo tanto, el archivo de manifiesto se establece como se indica a continuación.

<activity android:name=".VideoActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden"/> 

solía

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); O setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

Para establecer manualmente la orientación. Funciona pero reinicia la actividad – se encontró onCreate (). Por lo tanto, la reproducción de vídeo se reinicia inesperadamente desde el principio. No puedo hacer que sea tan suave como usar onConfigurationChanged() – el método de detección de rotación automática.

Entonces, ¿cómo hacer que la orientación manual de la pantalla cambie sin reiniciar la actividad?

Gracias.

  • Cómo reiniciar el emulador para probar ACTION_BOOT_COMPLETED?
  • 5 Solutions collect form web for “Android: orientación manual de la pantalla sin reiniciar la actividad?”

    Para el cambio de orientación de manaul:

     <activity android:name=".VideoDetails" android:configChanges="orientation"/> public class VideoDetails extends Activity { ... onStart() { setRequestedOrientation(orientation); } onConfigurationChanged(Configuration newConfig){ // do stuff for orientation change. } onClick() { setRequestedOrientation(orientation); } } 

    Para detección de orientación automática:

     <activity android:name=".VideoDetails" android:configChanges="orientation"/> public class VideoDetails extends Activity { ... onConfigurationChanged(Configuration newConfig){ // do stuff for orientation change. } } 

    http://developer.android.com/guide/topics/resources/runtime-changes.html . Usted puede tener un mirar el acoplamiento debajo del título que maneja la configuración cambie usted mismo

     <activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name"> 

    Ahora, cuando una de estas configuraciones cambia, MyActivity no se reinicia. En su lugar, MyActivity recibe una llamada a onConfigurationChanged (). Este método se pasa un objeto de configuración que especifica la nueva configuración de dispositivo.

      android:configChanges="orientation|screenSize" (andorid 3.2 and above screen size also changes. add this) 

    Suponga que su video es de 10 minutos. El video se reproduce hasta 5 minutos y la orientación cambia, usted sabe que ha jugado hasta 5 minutos.

    Puede guardar el progreso real del vídeo en onSaveInstanceState () y obtener los datos guardados en onRestoreInstanceState () del Bundle, después de que puede iniciar la reproducción con los datos de progreso o desde el principio si no se guardaron datos.

    Cuando la orientación cambia la actividad es destruida y recreada. Si desea guardar datos y conservar, puede hacer lo siguiente para guardar un gran conjunto de datos

      @Override public Object onRetainNonConfigurationInstance() { final MyDataObject data = collectMyLoadedData(); return data; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance(); if (data == null) { data = loadMyData(); } } 

    Para un conjunto pequeño de datos

      @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); // Save UI state changes to the savedInstanceState. // This bundle will be passed to onCreate if the process is // killed and restarted. savedInstanceState.putString("NICK_NAME", Name);//save nick name } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); // Restore UI state from the savedInstanceState. // This bundle has also been passed to onCreate. Name = savedInstanceState.getString("NICK_NAME");//restore nick name } 

    Para comprobar la orientación

     @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } } 

    VideoView en Android . En este caso también el video se transmite desde el servidor. Compruebe la respuesta aceptada (respuesta común). Exactamente lo mismo sugerí.

    Comienza añadiendo el nodo android:configChanges nodo Activity's manifiesto de tu Activity's

     android:configChanges="keyboardHidden|orientation" 

    Para obtener más información, consulte este enlace

    Añadir la etiqueta

     "android:configChanges="keyboard|keyboardHidden|orientation|screenSize|navigation" for your activity in Manifest.xml, 

    Y Anular el método

     public void onConfigurationChanged(Configuration newConfig) {} 

    Si usted necesita cambiar su disposición en el cheque del changechange de la orientación éste substituye la disposición en el cambio de la orientación

    Tener que reiniciar la aplicación después de que el cambio de orientación es inevitable.

    Mantenga la variable relacionada con el estado del vídeo en la aplicación para que la actividad no reinicie la reproducción al principio.

    Este código es de una aplicación de ejemplo que hice para probar esta respuesta.

     public class MyApplication extends Application { int counter; @Override public void onCreate() { super.onCreate(); counter = 0; } } 

    Agregue la aplicación en su manifiesto

     <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:name="com.example.orientationchange.MyApplication" > <activity ... 

    Uso con actividad:

     public class MainActivity extends Activity { TextView output; MyApplication app ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); app = (MyApplication) getApplication(); setContentView(R.layout.activity_main); output = (TextView) findViewById(R.id.output); //A counter thread used to test the solution. new CounterTask().execute( 100 ); } ... 

    Ahora la rotación no limpia las variables de estado.

    También puede usar Preferencias para una solución más codificada para preservar el estado. Las preferencias también recordarán el estado de un uso de la aplicación a otro, donde el estado de la aplicación se limpia enDestroy () de la aplicación.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.