Обзор
На некоторых устройствах Android экран приложения может остаться чёрным после закрытия поверх него системного окна: запроса разрешения, диалога или экранной клавиатуры. Приложение продолжает работать, но ничего не отрисовывается до следующего изменения.
KlugBlackScreen перерисовывает вид приложения, как только такое окно закрывается. Включённый один раз при запуске, он автоматически работает в фоне. Для особых случаев его также можно запустить напрямую.
Возможности
- Автоматический режим: включите один раз, и он перерисовывает после каждого системного окна
- Ручная перерисовка для особых случаев
- Мягкая перерисовка без мерцания и более сильная — для упорных случаев
- На других платформах ничего не делает, поэтому код можно оставить в кроссплатформенном приложении
Поддерживаемые платформы
Начало работы
Добавьте расширение в дескриптор вашего приложения:
<extensions>
<extensionID>com.klug.blackscreen</extensionID>
</extensions>
Примеры кода
Три сценария. Каждый вызов возвращается сразу и выполняет работу в потоке UI Android; на других платформах вызовы ничего не делают.
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
| BlackScreen.getInstance() | Возвращает единственный экземпляр. |
| isSupported | True на Android; false на iOS, macOS и десктопе, где каждый вызов ничего не делает. |
| startAuto() | Перерисовывает автоматически каждый раз, когда окно приложения снова получает фокус, например после закрытия системного окна. Вызовите один раз при запуске; повторный вызов не имеет эффекта. |
| stopAuto() | Останавливает автоматический режим. |
| fix() | Один раз перерисовывает вид без мерцания. |
| fixHard() | Более сильная перерисовка для упорных случаев, с коротким мерцанием. Первый вызов заменяет фон запуска окна простым белым. |
Требования
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6.0 (API 23) или новее |
| Разрешения | Нет |