Alguns apps precisam manter a tela ativada, por exemplo, os apps de jogos ou filmes. Algumas APIs do Android mantêm a tela ligada automaticamente. Em outros casos, você pode usar um modificador do Compose ou definir uma flag para manter a tela ligada manualmente.
Manter a tela ligada no Compose
Se o app usa o Jetpack Compose, aplique o modificador keepScreenOn a um
combinável. O modificador está disponível na interface do Compose 1.9.0 e versões mais recentes. A tela
permanece ligada enquanto o modificador faz parte da composição. Quando nenhum elemento combinável
usa o modificador, o Compose para de manter a tela ligada automaticamente.
Para manter a tela ligada apenas em alguns momentos, aplique o modificador de forma condicional. O exemplo a seguir mantém a tela ligada apenas enquanto um vídeo é reproduzido:
@Composable fun VideoPlayer(isPlaying: Boolean, modifier: Modifier = Modifier) { Box( modifier = modifier // Keep the screen on only while the video plays. .then(if (isPlaying) Modifier.keepScreenOn() else Modifier) ) { // Video surface and playback controls. } }
O modificador define a mesma propriedade de visualização que o atributo android:keepScreenOn
descrito na próxima seção. Assim, ele mantém a tela ligada apenas enquanto
a janela do app está visível. Ela não limpa uma flag FLAG_KEEP_SCREEN_ON
definida pelo app na janela.
Manter a tela ligada manualmente
Para manter a tela do dispositivo ligada, defina a flag FLAG_KEEP_SCREEN_ON na
atividade. Essa flag só pode ser definida em uma atividade, nunca em um serviço ou outro
componente do app. Exemplo:
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
Outra maneira de manter a tela ligada é definir o
atributo android:keepScreenOn
no arquivo XML de layout do aplicativo:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
Usar android:keepScreenOn="true" é equivalente a usar
FLAG_KEEP_SCREEN_ON.
Você pode usar a abordagem que for melhor para seu app. A vantagem de definir
a flag de forma programática na atividade é que você tem a opção de
limpar a flag de forma programática mais tarde, permitindo que a tela seja
desativada.
Se um app com a flag FLAG_KEEP_SCREEN_ON entrar em segundo plano, o
sistema vai permitir que a tela seja desligada normalmente. Não é necessário limpar explicitamente
a sinalização nesse caso. Se o app não precisar mais manter a tela ligada,
limpe a flag chamando
clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).
Modo ambiente para TV
Em dispositivos de TV, use FLAG_KEEP_SCREEN_ON para impedir que o dispositivo entre
no modo ambiente durante a reprodução de vídeo ativa. Se a atividade em primeiro plano
não definir FLAG_KEEP_SCREEN_ON, o dispositivo vai entrar automaticamente no modo ambiente
após um período de inatividade.