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, é possível definir uma flag para manter a tela ligada manualmente.

Manter a tela ligada manualmente

Para manter a tela do dispositivo ativada, 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:

Kotlin

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    }
}

Java

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getWindow().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 app:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">
    ...
</RelativeLayout>

O uso de android:keepScreenOn="true" é equivalente a usar FLAG_KEEP_SCREEN_ON. Você pode usar a abordagem que for melhor para o app. A vantagem de definir a flag programaticamente na sua atividade é que ela oferece a opção de limpar a flag programaticamente mais tarde e, assim, permitir que a tela seja desativada.

Se um app com a flag FLAG_KEEP_SCREEN_ON for colocado em segundo plano, o sistema permitirá que a tela seja desligada normalmente. Não é necessário limpar explicitamente a flag nesse caso. Se o app não precisar mais manter a tela ligada, ele precisará limpar 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 entrará automaticamente no modo ambiente após um período de inatividade.

Veja também