2011-12-09 11 views
43

Tengo tres actividades en mi aplicación. Quiero mantener la pantalla despierta cuando está en la segunda actividad. La pantalla no debería apagarse en mi segunda actividad a menos que se presione manualmente la tecla "bloquear". Revisé muchos enlaces pero me parecen poco claros.Mantener la pantalla despierta durante toda mi actividad

+0

Ver la respuesta detallada aquí ... http://stackoverflow.com/questions/5712849/how-do-i-keep-the-screen-on-in-my-app/24261889# 24261889 – Nepster

Respuesta

125

Como se explica en el tutorial Android Keep the Screen On, puede hacerlo de varias maneras. Puede configurar el FLAG_KEEP_SCREEN_ON en la ventana de la actividad:

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

Un equivalente XML para esto es añadir el atributo android:keepScreenOn="true" a la vista raíz de la disposición de su actividad. La ventaja de establecer el indicador mediante programación es que se puede utilizar

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

cuando ya no tenga que forzar la pantalla para que permanezca encendida durante su actividad está en marcha.

Otra forma de controlar la pantalla (y otros recursos) es el uso de una cerradura raíz:

mWakeLock = ((PowerManager) getContext().getSystemService(Context.POWER_SERVICE)) 
    .newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName()); 
mWakeLock.acquire(); 
// screen stays on in this section 
mWakeLock.release(); 

El manifiesto tendrá que incluir este permiso:

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

Sin embargo, como se discutió en el tutorial, un bloqueo de activación es más apropiado para otros casos de uso (como un servicio o una tarea en segundo plano que requiere que la CPU siga funcionando mientras la pantalla está apagada).

+1

funciona perfecto! ¡Gracias! – user838522

+6

La primera opción es ** mucho ** mejor ... ¡no use una cerradura de despertador!¡Requiere un permiso adicional en el manifiesto! http://stackoverflow.com/a/2134602/844882 –

+9

@AlexLockwood - Para la aplicación de OP, el primer enfoque es mejor. Sin embargo, es un error adoptar una política de "no usar un bloqueo de activación". Un bloqueo de activación proporciona más control sobre el estado de activación de pantalla. Cuando la actividad solo requiere que la pantalla se mantenga encendida durante períodos cortos, se puede liberar el bloqueo de activación, lo que permite ahorrar batería. Con el primer enfoque, la pantalla se mantiene encendida durante todo el tiempo que la actividad está en primer plano. Además, el primer enfoque no puede ser utilizado por un Servicio que realiza trabajo en nombre de una actividad. –

6

Según entiendo su pregunta, creo que tiene que usar WAKE_LOCK para ello en su aplicación.

Algo así como,

final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"");  
mWakeLock.acquire(); 

Y en el archivo de archivo de la aplicación manifest.xml añadir esto,

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

esto también funciona ... ¡gracias! – user838522

1

tratar de utilizar este

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

¿Puede agregar un poco más de aclaración sobre cómo su solución resuelve el problema? Ayudará al OP a comprender mejor su solución. – KLee1

38

Encuentro esta solución mucho más fácil:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" // Whatever your layout is 
    ... 
    android:keepScreenOn="true"> // Add this line 

sólo Agregar a su actividad de diseño XML.

+4

Eso es agradable y limpio. – OneWorld

1

Este código está en desuso, utilizar esto en su lugar:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); 
wl.acquire(); 

Después de terminar con el uso, llame al (mejor solución es llamar a este método en el método OnDestroy de alguna actividad):

wl.release(); 

Más sobre esto en este link

+2

[PowerManager.SCREEN_DIM_WAKE_LOCK] (http://developer.android.com/reference/android/os/PowerManager.html#SCREEN_DIM_WAKE_LOCK) está en desuso en favor de [WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON] (http://developer.android. com/reference/android/view/WindowManager.LayoutParams.html # FLAG_KEEP_SCREEN_ON) en el nivel 17 de la API. – anon

Cuestiones relacionadas