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);
Ian G. Clifton
fonte
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.

capelone78
fonte
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"

neteinstein
fonte
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);
Null Pointer Exception
fonte
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);
}
orkoden
fonte
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

Gonkas
fonte
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);
MBMJ
fonte
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;
Artur Majtczak
fonte
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);
                }
            });
        }

    }
Manisha
fonte
-1

Isso pode ser feito adquirindo um Wake Lock.

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

wonne
fonte
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