SetRequestedOrientation antes de mostrar ProgressDialog conduce a bloqueo

Estoy desarrollando una aplicación de Android que sólo debería ejecutarse en modo de retrato debido a la disposición no se ajusta a la pantalla de un teléfono de paisaje. En tabletas y netbooks, sin embargo, quiero que la aplicación sólo se ejecute en modo horizontal.

Ahora he intentado comprobar si la aplicación se está ejecutando en un dispositivo de tableta y establecer la orientación correspondiente solicitado a través de setRequestedOrientation.

El problema es que la aplicación se bloquea ahora cuando el dispositivo ya no se mantiene en la orientación que estoy solicitando, porque se muestra un progresoDialog poco después de la llamada a setRequestedOrientation, que parece que se filtra una ventana entonces.

Logcat dice:

10-18 21:15:30.698: E/WindowManager(653): Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41991418 that was originally added here 10-18 21:15:30.698: E/WindowManager(653): android.view.WindowLeaked: Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41991418 that was originally added here 10-18 21:15:30.698: E/WindowManager(653): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:279) 10-18 21:15:30.698: E/WindowManager(653): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 10-18 21:15:30.698: E/WindowManager(653): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 10-18 21:15:30.698: E/WindowManager(653): at android.view.Window$LocalWindowManager.addView(Window.java:537) 10-18 21:15:31.888: E/WindowManager(653): Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41588040 that was originally added here 10-18 21:15:31.888: E/WindowManager(653): android.view.WindowLeaked: Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41588040 that was originally added here 10-18 21:15:31.888: E/WindowManager(653): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:279) 10-18 21:15:31.888: E/WindowManager(653): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 10-18 21:15:31.888: E/WindowManager(653): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 10-18 21:15:31.888: E/WindowManager(653): at android.view.Window$LocalWindowManager.addView(Window.java:537) 10-18 21:15:34.168: E/AndroidRuntime(653): at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:599) 10-18 21:15:34.168: E/AndroidRuntime(653): at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:336) 10-18 21:15:34.168: E/AndroidRuntime(653): at android.view.WindowManagerImpl$CompatModeWrapper.removeView(WindowManagerImpl.java:151) 

¿Qué podría hacer para evitar este accidente? Cualquier ayuda sería muy apreciada.

EDIT: Como no pude resolver esto, finalmente logré editar mi Layout para que ahora permita el uso en modo vertical y horizontal.

¿Tiene algún código fuente que pueda mostrar? Eso podría ayudar a identificar el problema.

En realidad tenía exactamente el mismo problema. Pero sólo estaba sucediendo para algunas de mis actividades.

Cuando la orientación de la pantalla cambia, Android realmente destruye y recrea la actividad.

Así que, tenía código que se veía así.

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); setContentView(R.layout.displayscreen); bottomButton = (Button) findViewById(R.id.bottomButton); bottomButton.setOnClickListener(bottomButtonClick); bottomButton.setTypeface(font); bottomButton.setTextSize(16); } 

Ver lo que estaba sucediendo es que la vista no se adjunta correctamente al gestor de ventanas. Así que decidí que el creador quizás no era el mejor lugar para hacer esto.

En su lugar, lo añadí a mi en Resume y funciona. Al igual que:

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.displayscreen); bottomButton = (Button) findViewById(R.id.bottomButton); bottomButton.setOnClickListener(bottomButtonClick); bottomButton.setTypeface(font); bottomButton.setTextSize(16); } @Override protected void onResume() { super.onResume(); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } 

Desafortunadamente esto también hace que la actividad siga siendo destruida y recreada. Llamar a la onCreate y onResume dos veces … ¿No es cierto bien?

Así que para solucionar este problema. Tienes que añadir esto a tu manifiesto android para tu actividad.

 android:configChanges="keyboardHidden|orientation" 

Un ejemplo:

 <activity android:name="com.Test.Info.DisplayInfo" android:configChanges="keyboardHidden|orientation" android:label="@string/info"> </activity> 

Este código impide el ciclo de destruir / recrear.

Espero que esto ayude!

Aclamaciones

Si utiliza

 setRequestedOrientation(SCREEN_ORIENTATION_NOSENSOR); 

Para bloquear temporalmente, y

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 

Para desbloquear la rotación de la pantalla, tal vez se encontró con el siguiente problema .

Si utiliza este método para bloquear la orientación de la pantalla y el dispositivo no está en su orientación predeterminada, cambiará a la orientación predeterminada, destruyendo y creando su actividad. Su aplicación se bloqueará, debido al hecho de que está intentando actualizar algunos progressDialog destoryed.

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