Android desativa o tempo limite da tela enquanto o aplicativo está em execução


Respostas:


172

Você deseja usar algo assim:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

4
isso o torna para a atividade de corrida ou todo o aplicativo?
Muhammed Refaat

@ MayurR.Amipara sim, acho que é o caso aqui
Muhammed Refaat

1
Se eu escrever este código no método onCreate () da classe de aplicativo, ele funcionará para o aplicativo inteiro?
Jayesh

Se não, como posso manter a tela inteira do aplicativo ligada inserindo menos código em vez de adicionar essa linha a cada atividade.
Jayesh,

1
@Jayesh: Você pode criar uma baseActivity e escrever este código no Método onCreate e estender todas as atividades de baseActivity.
maryam de

102

Eu usei:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

para desativar o tempo limite da tela e

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

para reativá-lo.


83

Também existe uma maneira XML que o Google recomenda:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true">

Verifique o Google Slides - Slide 16.

"Wakelocks são caros se esquecidos (...) Considere o uso de android: keepScreenOn para garantir a correção"


2
Para aqueles que não têm tempo para ler o pdf vinculado: "Wakelocks são caros se esquecidos", "Considere usar android: keepScreenOn para garantir a correção".
lenrok258

2
@ lenrok258 Adicionado à resposta ;-)
neteinstein

Apesar de usar PowerManager.newWakeLocke getWindow().addFlagsnão funcionar por algum motivo, funcionou.
Benjamin Basmaci de


3

Simplesmente adicione a linha abaixo em MainActivityseu aplicativo e nunca apague as luzes.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

2

Em uma visualização, no meu caso uma subclasse SurfaceView, você pode definir a tela sempre ligada. Queria que a tela permanecesse ligada enquanto essa visualização ainda estivesse desenhando coisas.

public class MyCoolSurfaceView extends SurfaceView { 
@Override
protected void onAttachedToWindow (){
    super.onAttachedToWindow();
    this.setKeepScreenOn(true);
}

@Override
protected void onDetachedFromWindow(){
    super.onDetachedFromWindow();
    this.setKeepScreenOn(false);
}

1
Na verdade, isso é mais complicado do que o necessário. Basta chamar setKeepsScreenOn (true) em qualquer lugar, e o framework cuidará automaticamente de manter a tela ligada quando sua janela estiver sendo exibida.
hackbod

1

Coloque isso em onStart

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "no sleep");
    wakeLock.acquire();

E isso em você se manifesta

    <uses-permission android:name="android.permission.WAKE_LOCK" />

Não se esqueça de

wakeLock.release();

em onStop


1
PARTIAL_WAKE_LOCKpermite que a tela apague.
Michael

1

esta é a melhor maneira de resolver isso

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

por que a necessidade de FLAG_FULLSCREEN para responder a esta pergunta?
Abdul Wasae de


0
procedure SetSleep(aEnable:Boolean);
var
    vFlags: integer;
begin
    vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or
        TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or
        TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or
        TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;

    if aEnable then
    begin
      CallInUIThread (   // uses FMX.Helpers.Android
      procedure
      begin
        TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);
      end );
    end
    else
      CallInUIThread (
      procedure
      begin
        TAndroidHelper.Activity.getWindow.clearFlags (vFlags);
      end );
end;

0

1.getWindow (). AddFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); é a melhor solução para Android nativo.
2. se você quiser fazer com o aplicativo Android React, use o código abaixo.

@ReactMethod
    public void activate() {
        final Activity activity = getCurrentActivity();
        if (activity != null) {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                }
            });
        }

    }

-1

Isso pode ser feito adquirindo um Wake Lock.

Eu não testei sozinho, mas aqui está um pequeno tutorial sobre isso.


10
Não não não. Wake locks são facilmente mal utilizados e podem descarregar a bateria do usuário se não forem usados ​​com muito cuidado. Use View#setKeepScreenOnou seu atributo de layout xml equivalente,android:keepScreenOn="true"
adamp

5
@adamp: O OP não indicou se seu aplicativo é uma atividade ou um serviço. Uma atividade deve usar o mecanismo que você cita. Um serviço deve usar a WakeLock.
CommonsWare

obrigado, não é um serviço. é semelhante a um visualizador de imagens e eu só não quero que a tela seja escurecida.
grampo de

@adamp: sua menção a android:keepScreenOn="true"é a única resposta válida para atividades em minha opinião. Fique longe de wakelocks, a menos que seja absolutamente necessário.
pauluss86

Não apenas Atividades, mas qualquer tipo de IU que mostra uma janela. A resposta aceita de usar o sinalizador de janela correspondente é igualmente válida.
adamp em
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.