Wie kann ich richtig Steuern Bühne Ausrichtung auf Android mit AIR mobile?

Habe ich eine AIR Anwendung, die ich Wünsche, um lock-ins Querformat. Ich will nicht, dass die Anwendung drehen auf hochformat-Modus. - Lösung von Adobe zu diesem problem, scheinbar, wäre die Konfiguration meiner *-app.xml Datei wie folgt:

<!-- 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>

Das funktioniert meistens - aber nicht immer. Zum Beispiel, in einigen Varianten von Android (Beispiel: 2.x und läuft auf einem Nook Tablet), wenn mein Bildschirm schaltet sich aus, während der Flash Builder Verpacken und bereitstellen von meinem APK-die app startet in einer halb-kaputten Zustand, in dem das Seitenverhältnis ist Landschaft, aber alles wurde gemessen mit portrait Dimensionen. Auf anderen Geräten, wie meinem Google Nexus (Android 4.1), startet die Anwendung korrekt (im Querformat), aber wenn ich schalten Sie den Bildschirm, drehen Sie das Gerät, um portrait-Modus, und schalten Sie den Bildschirm wieder auf - meine AIR app wurde unsichtbar gedreht in den portrait-Modus wieder. Was ist schlimmer, keine StageOrientationEvent.ORIENTATION_CHANGE-Ereignisse, die noch zugeschickt bekomme, um anzuzeigen, dass dies geschehen ist.

Habe ich versucht, eine Variante des obigen Ansatzes, legen Sie programmgesteuert die device orientation:

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

Dieser Ansatz hat den gleichen oben genannten Probleme.

Ich habe auch versucht den Ansatz genannt werden in diesem anderen Stack-Overflow-thread. Anstatt deaktivieren die Option " automatische Ausrichtung, ich habe versucht, hören StageOrientationEvent.ORIENTATION_CHANGE-und verhindert, dass das Gerät von der Eingabe der portrait-Modus:

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;
    }
}

Auch dies scheint zu funktionieren nur einen Teil der Zeit. In vielen Fällen, ein Ereignis.preventDefault() hat keine Wirkung und die Anwendung dreht sich trotzdem.

Also... meine Frage an andere LUFT-Entwickler ist: kennt jemand einen Weg, um zuverlässig ein Gerät sperren in einer einzigen Orientierung?

  • Das sehen einige viel versprechende Ergebnisse, indem Sie: (a) das Hören auf der Bühne für Event.RESIZE Veranstaltungen und die NativeApplication für Event.ACTIVATE Veranstaltungen. (b) Überprüfen, um zu sehen, ob height > width, und wenn so aufrufen stage.setOrientation( StageOrientation.ROTATED_RIGHT ); Müssen mehr Tests (auf mehreren Geräten) bevor ich wissen, ob dieser Ansatz wirklich solide...
  • Wenn Sie etwas gefunden, solide, lassen Sie es uns wissen. Die aktuelle Phase der Orientierung (als der AIR 3.4) ist in der Tat ein wenig funky auf Android-Geräten.
  • Ich habe nur getestet auf ein paar Geräte so weit: das Nexus 7 (Android 4.1), Kindle Fire & Nook Tablet (Android 2.3) - aber es scheint, wie I ' ve found a fix. Hinzufügen, wird es als eigenes Kommentar unten, so kann ich nach lesbaren source code.
InformationsquelleAutor bvaughn | 2012-09-03
Schreibe einen Kommentar