Überblick
Auf manchen Android-Geräten kann der Bildschirm einer App schwarz bleiben, nachdem ein Systemfenster darüber geschlossen wurde: eine Berechtigungsabfrage, ein Dialog oder die Bildschirmtastatur. Die App läuft weiter, aber bis zur nächsten Änderung wird nichts gezeichnet.
KlugBlackScreen zeichnet die Ansicht der App neu, sobald ein solches Fenster schließt. Einmal beim Start eingeschaltet, arbeitet es automatisch im Hintergrund. Für Sonderfälle lässt es sich auch direkt auslösen.
Funktionen
- Automatischer Modus: einmal einschalten, es zeichnet nach jedem Systemfenster neu
- Manuelles Neuzeichnen für Sonderfälle
- Ein sanftes Neuzeichnen ohne Flackern und ein stärkeres für hartnäckige Fälle
- Tut auf anderen Plattformen nichts, sodass der Code in einer plattformübergreifenden App bleiben kann
Unterstützte Plattformen
Erste Schritte
Fügen Sie die Erweiterung Ihrem Application Descriptor hinzu:
<extensions>
<extensionID>com.klug.blackscreen</extensionID>
</extensions>
Codebeispiele
Drei Abläufe. Jeder Aufruf kehrt sofort zurück und erledigt seine Arbeit im Android-UI-Thread; auf anderen Plattformen tun die Aufrufe nichts.
import com.klug.blackscreen.BlackScreen; // once, in the constructor of your main class: from now on the view is redrawn // whenever the app window gets the focus back, after a permission prompt, // a dialog, the keyboard or another activity BlackScreen.getInstance().startAuto(); // a second call has no effect // iOS, macOS and desktop: isSupported is false and every call does nothing, // so no platform check is needed. stopAuto() switches it off again (rarely needed).
// call this from the result handler of any system window that covered the app: // a permission prompt, a share sheet, a native dialog, a sign-in page function onSystemWindowClosed():void { BlackScreen.getInstance().fix(); // redraw once, no flicker } // example: your own permission flow reports back myPermissionFlow.onResult = function( granted:Boolean ):void { onSystemWindowClosed(); if ( granted ) startCamera(); else showPermissionHint(); };
import flash.desktop.NativeApplication; import flash.events.Event; // back from another activity (share sheet, browser, system settings) and fix() // is not enough on a given runtime build: the stronger redraw may flicker once NativeApplication.nativeApplication.addEventListener( Event.ACTIVATE, function( e:Event ):void { BlackScreen.getInstance().fixHard(); }); // the first fixHard() replaces the launch background of the window with plain white, // so the short toggle does not show the splash image
API-Übersicht
| BlackScreen.getInstance() | Gibt die einzige Instanz zurück. |
| isSupported | True unter Android; false unter iOS, macOS und Desktop, wo jeder Aufruf nichts tut. |
| startAuto() | Zeichnet automatisch neu, sobald das App-Fenster den Fokus zurückerhält, zum Beispiel nachdem ein Systemfenster geschlossen wurde. Einmal beim Start aufrufen; ein zweiter Aufruf hat keine Wirkung. |
| stopAuto() | Beendet den automatischen Modus. |
| fix() | Zeichnet die Ansicht einmal ohne Flackern neu. |
| fixHard() | Stärkeres Neuzeichnen für hartnäckige Fälle, mit kurzem Flackern. Der erste Aufruf ersetzt den Start-Hintergrund des Fensters durch schlichtes Weiß. |
Voraussetzungen
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6.0 (API 23) oder neuer |
| Berechtigungen | Keine |