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.