2012-02-17 18 views
22

Tengo un Activity que generalmente necesita algo de tiempo para ver la pantalla sin interactuar con ella.¿Cómo evitar que la pantalla de un dispositivo Android se apague durante la ejecución de una actividad?

El problema es que la pantalla se apaga, al igual que con cualquier otra aplicación. Quiero evitar que se apague automáticamente para mi Activity, como lo hace Dolphin HD (si lo configura desde el menú de configuración).

Quiero permitir que el usuario apague la pantalla presionando el botón de bloqueo habitual, pero evite el bloqueo automático del dispositivo mientras está en mi Activity.

¿Cómo puedo lograrlo?

Gracias.

+0

Lo que estás buscando es un [wakelock] (http://developer.android.com/reference/android/os/PowerManager.html). –

+1

@alextsc: en realidad, para las IU, hay una mejor respuesta. – CommonsWare

Respuesta

64

Agregue android:keepScreenOn="true" a algún widget en su recurso de diseño XML para esta actividad. Siempre que ese widget esté visible en la pantalla, la pantalla no se apagará automáticamente.

EDIT:

Un WakeLock, según lo sugerido por otras respuestas, técnicamente va a funcionar. Pero luego debe liberar manualmente el WakeLock (si lo arruina, la pantalla permanecerá encendida por mucho tiempo). Y, dado que podría arruinarlo, necesita el permiso WAKE_LOCK. Usar keepScreenOn evita todo eso.

+0

¿Quiere decir widget en el sentido "componente widget"? ¿O algo de vista? – Gangnus

+0

Gracias por la respuesta, funcionó bastante bien :) Creo que el wakelock puede ser una buena forma, pero esta es más fácil. – Alex

+1

Traté de agregar este atributo a una vista que está dentro de un fragmento que inicialmente se GONE y se establece en VISIBLE por código en la aplicación. Esto no funcionó: la pantalla aún se apaga. La respuesta por "noelicus" funciona bien. – treesAreEverywhere

27

Para cambiar sobre la marcha hacer esto:

if (keepScreenOn) 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
else 
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
Cuestiones relacionadas