Manter a tela ativada

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.

Consulte também