Android deshabilita el tiempo de espera de la pantalla mientras la aplicación se está ejecutando


117

¿Hay alguna forma de desactivar el protector de pantalla mientras mi aplicación se está ejecutando?

La atenuación de la pantalla es lo que quiero decir.


3
¿Qué hay de usar View.setKeepScreenOn()[enlace] [1] ?. Aunque nunca lo he usado yo mismo. [1]: developer.android.com/reference/android/view/…
dorzey

3
posible duplicado de Force Screen On
Richard Ev

Respuestas:


173

Quieres usar algo como esto:

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

4
¿Esto lo hace para la actividad de correr o para toda la aplicación?
Muhammed Refaat

@ MayurR.Amipara sí, creo que este es el caso aquí
Muhammed Refaat

1
Si escribo este código en el método onCreate () de la clase de aplicación, ¿funcionará para toda la aplicación?
Jayesh

Si la respuesta es No, ¿cómo puedo mantener encendida toda la pantalla de la aplicación insertando menos código en lugar de agregar esa línea a cada una de las actividades?
Jayesh

1
@Jayesh: Puede crear una baseActivity y escribir este código en el método onCreate y extender toda la actividad desde baseActivity.
maryam

102

Solía:

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

para deshabilitar el tiempo de espera de la pantalla y

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

para volver a habilitarlo.


84

También hay una forma XML que recomienda Google:

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

Consulte Presentaciones de Google - Diapositiva 16.

"Los Wakelocks son costosos si se olvidan (...) Considere usar android: keepScreenOn para garantizar la corrección"


2
Para aquellos que no tienen tiempo para leer el pdf vinculado: "Los Wakelocks son costosos si se olvidan", "Considere usar android: keepScreenOn para garantizar la corrección".
lenrok258

2
@ lenrok258 Agregado a la respuesta ;-)
neteinstein

Mientras usaba PowerManager.newWakeLocky getWindow().addFlagsno funcionó por alguna razón, esto sí lo hizo.
Benjamin Basmaci


3

Simplemente agregue la línea de abajo en su MainActivityy su aplicación nunca apague las luces.

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

2

En una vista, en mi caso una subclase de SurfaceView, puede configurar la pantalla siempre encendida. Quería que la pantalla permaneciera encendida mientras esta vista todavía dibujaba cosas.

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

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

1
En realidad, eso es más complicado de lo necesario. Simplemente llame a setKeepsScreenOn (verdadero) en cualquier lugar, y el marco se encargará automáticamente de mantener la pantalla encendida cuando se muestre su ventana.
hackbod

1

Pon esto en onStart

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

Y esto en ti manifiesta

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

No te olvides de

wakeLock.release();

en onStop


1
PARTIAL_WAKE_LOCKpermite que la pantalla se apague.
Michael

1

esta es la mejor manera de resolver esto

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

¿Por qué es necesario que FLAG_FULLSCREEN responda a esta pregunta?
Abdul Wasae


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); es la mejor solución para Android nativo.
2. Si desea hacerlo con la aplicación de Android React, utilice el siguiente código.

@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

Esto se puede hacer adquiriendo un Wake Lock.

No lo probé yo mismo, pero aquí hay un pequeño tutorial sobre esto.


10
No no no. Las cerraduras de activación se utilizan fácilmente y pueden agotar la batería del usuario si no se utilizan con mucho cuidado. Use View#setKeepScreenOno su atributo de diseño xml equivalente,android:keepScreenOn="true"
adamp

5
@adamp: El OP no indicó si su aplicación es una actividad o un servicio. Una actividad debe utilizar el mecanismo que cita. Un servicio debe utilizar un WakeLock.
CommonsWare

gracias no es un servicio. es similar a un visor de imágenes y no quiero que la pantalla se atenúe.
pinza

@adamp: tu mención de android:keepScreenOn="true"es la única respuesta válida para actividades en mi opinión. Manténgase alejado de los wakelocks a menos que sea absolutamente necesario.
pauluss86

No solo actividades, sino cualquier tipo de interfaz de usuario que muestre una ventana. La respuesta aceptada de usar la bandera de ventana correspondiente es igualmente válida.
adamp
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.