¿Cómo puedo controlar correctamente la orientación del escenario en Android con AIR mobile?

Tengo una aplicación de AIR que deseo bloquear en orientación horizontal. Nunca quiero que la aplicación gire al modo de retrato. La solución de Adobe para este problema, aparentemente, sería configurar mi archivo * -app.xml como sigue:

<!-- The initial aspect ratio of the app when launched (either "portrait" or "landscape"). Optional. Mobile only. Default is the natural orientation of the device --> <aspectRatio>landscape</aspectRatio> <!-- Whether the app will begin auto-orienting on launch. Optional. Mobile only. Default false --> <autoOrients>false</autoOrients> 

Esto funciona la mayor parte del tiempo, pero no siempre. Por ejemplo, si la pantalla de mi dispositivo se desactiva mientras Flash Builder empaqueta y despliega mi APK, la aplicación se inicia en un estado semi-roto donde su relación de aspecto Es paisaje pero todo se ha medido con dimensiones de retrato. En otros dispositivos, como mi Google Nexus (Android 4.1), la aplicación se inicia correctamente (en modo horizontal), pero si apago la pantalla, giro el dispositivo al modo vertical y vuelvo a encender la pantalla. Girado de nuevo en el modo retrato. Lo que es peor, ningún evento StageOrientationEvent.ORIENTATION_CHANGE se envía incluso para indicar que esto ha sucedido.

He intentado una variante de la aproximación antedicha, que es programar por programa la orientación del dispositivo:

 private function onAddedToStage( event:Event ):void { stage.autoOrients = false; stage.setOrientation( StageOrientation.ROTATED_RIGHT ); } 

Este enfoque tiene los mismos problemas mencionados anteriormente.

También he intentado el acercamiento mencionado en este otro hilo del apilamiento de la pila . En lugar de desactivar la orientación automática, he intentado escuchar StageOrientationEvent.ORIENTATION_CHANGE e impedir que el dispositivo entre en modo retrato:

 private function onAddedToStage( event:Event ):void { stage.addEventListener( StageOrientationEvent.ORIENTATION_CHANGE, onStageOrientationChange, true, int.MAX_VALUE ); } private function onStageOrientationChange( event:StageOrientationEvent ):void { switch( event.afterOrientation ) { case StageOrientation.DEFAULT: case StageOrientation.UPSIDE_DOWN: case StageOrientation.UNKNOWN: event.preventDefault(); break; case StageOrientation.ROTATED_RIGHT: case StageOrientation.ROTATED_LEFT: break; } } 

Esto, también, parece funcionar sólo una parte del tiempo. En muchos casos, event.preventDefault () no tiene efecto y la aplicación gira de todos modos.

Así que … mi pregunta a otros desarrolladores de AIR que hay es: ¿Alguien sabe de una manera de bloquear de forma fiable un dispositivo en una sola orientación?

Aquí está el enfoque que he encontrado para trabajar para mí, en Android 2.3 (Fire and Nook), así como 4.1 (Nexus 7). No he probado con más dispositivos todavía, pero hasta ahora parece prometedor.

En primer lugar, he configurado mi configuración -app.xml de la siguiente manera:

 <aspectRatio>landscape</aspectRatio> <autoOrients>false</autoOrients> 

Luego he añadido el siguiente código a mi chispa Aplicación:

 private function onAddedToStage():void { stage.addEventListener( Event.RESIZE, onStageResize ); NativeApplication.nativeApplication.addEventListener( Event.ACTIVATE, onNativeApplicationActivate ); } private function onStageResize( event:Event ):void { checkForOrientationChange(); } private function onNativeApplicationActivate( event:Event ):void { checkForOrientationChange(); } private function checkForOrientationChange():void { if ( height > width ) { if ( stage ) { stage.setOrientation( StageOrientation.ROTATED_RIGHT ); } else { // The first ACTIVATE event occurs before the Application has been added to the stage callLater( checkForOrientationChange ); } } } 
  • ¿Cuál es el objetivo de establecer el tamaño mínimo del montón en una aplicación para Android?
  • ¿Qué tan bien soportada es la sensibilidad a la presión en los dispositivos Android?
  • Cómo obtener controlador USB OEM para Samsung Galaxy SIII con el número de modelo GT-I9300
  • Incluye una aplicación de escáner QR con PhoneGap
  • Android TimePicker no se muestra bien en modo horizontal
  • Aplicación móvil nativa que utiliza el lenguaje de dardo google
  • Crear una vista previa interactiva de 360 ​​grados del producto
  • El teclado en dispositivo físico Android no siempre se oculta mientras se utiliza Appium
  • Throwing OutOfMemoryError "pthread_create (1040KB stack) falló: Intenta de nuevo" al hacer posts asíncronos usando Volley
  • Impresión desde Android
  • Comunicación de bajo nivel en Android / otras plataformas móviles
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.