Visão geral
Em alguns dispositivos Android, a tela de um app pode ficar preta depois que uma janela do sistema é fechada sobre ela: um pedido de permissão, um diálogo ou o teclado na tela. O app continua em execução, mas nada é desenhado até a próxima mudança.
O KlugBlackScreen redesenha a view do app assim que uma dessas janelas é fechada. Ativado uma vez na inicialização, ele funciona automaticamente em segundo plano. Para casos especiais, também pode ser acionado diretamente.
Recursos
- Modo automático: ative uma vez, e ele redesenha após cada janela do sistema
- Redesenho manual para casos especiais
- Um redesenho suave, sem cintilação, e outro mais forte para casos teimosos
- Não faz nada em outras plataformas, então o código pode permanecer em um app multiplataforma
Plataformas compatíveis
Primeiros passos
Adicione a extensão ao descritor do seu aplicativo:
<extensions>
<extensionID>com.klug.blackscreen</extensionID>
</extensions>
Exemplos de código
Três fluxos. Cada chamada retorna imediatamente e faz seu trabalho na UI thread do Android; em outras plataformas, as chamadas não fazem nada.
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
Visão geral da API
| BlackScreen.getInstance() | Retorna a instância única. |
| isSupported | Verdadeiro no Android; falso no iOS, macOS e desktop, onde cada chamada não faz nada. |
| startAuto() | Redesenha automaticamente sempre que a janela do app recupera o foco, por exemplo depois que uma janela do sistema é fechada. Chame uma vez na inicialização; uma segunda chamada não tem efeito. |
| stopAuto() | Interrompe o modo automático. |
| fix() | Redesenha a view uma vez, sem cintilação. |
| fixHard() | Redesenho mais forte para casos teimosos, com uma breve cintilação. A primeira chamada substitui o fundo de inicialização da janela por branco liso. |
Requisitos
| AIR SDK | 51.x (HARMAN) |
| Android | Android 6.0 (API 23) ou posterior |
| Permissões | Nenhuma |