2009-06-13 13 views
5

Tengo una aplicación de Android (versión 1.5) que debe ejecutarse constantemente cuando se presiona un botón. Por lo tanto, cuando se presiona Button, me gustaría que el teléfono permanezca encendido y no que la pantalla o la CPU se agote el tiempo de espera.Prevención de la aplicación/tiempo de espera de la pantalla Android

Cuando se presiona otra Button, me gustaría que el teléfono vuelva a la normalidad y el tiempo de espera según la configuración del usuario.

+0

posible duplicado de [Forzar pantalla activada] (http://stackoverflow.com/questions/2131948/force-screen-on) –

Respuesta

3

Actualización: Según lo sugerido por Steve Pomeroy, this podría ser una mejor manera de hacerlo.


Se puede utilizar un WakeLock que requiere el permiso siguiente:

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

aquí es cómo adquirir y liberar un WakeLock:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag"); 
wl.acquire(); 
// wake locked... 
wl.release(); 

Dependiendo de sus necesidades usted puede ser capaz de usar un tipo diferente de WakeLock.

+0

Pensé en esa solución, pero solo puedo liberar el bloqueo de wake donde se creó localmente , no en el botón "Desactivado", que es donde debe ser liberado. Ideas? – Tom

+2

Crear un servicio. En el servicio onCreate(), agarre el WakeLock, retenido en un miembro privado de datos. En el servicio onDestroy(), libera WakeLock. En la actividad, cuando necesita que la pantalla/CPU permanezca encendida, llame a startService(). Algún tiempo después, cuando ya no necesite que la pantalla/CPU permanezca encendida, llame a stopService(). Ahora, el WakeLock se mantendrá mientras se esté ejecutando el servicio, sin importar lo que suceda con su actividad. Además, el servicio también podría vigilar los eventos de batería, quizás lanzar el WakeLock de todos modos una vez que la vida útil de la batería sea baja. – CommonsWare

+0

Me pone "wl no se puede resolver" en el método .release: WakeLockService clase pública se extiende servicio {@ Override \t \t pública IBinder onBind (arg0 Intención) {// \t \t método generada automáticamente TODO stub \t \t return null; \t} \t \t public void onCreate() { \t \t PowerManager pm = (PowerManager) getSystemService (Context.POWER_SERVICE); \t \t PowerManager.WakeLock wl = pm.newWakeLock (PowerManager.FULL_WAKE_LOCK, "Mi etiqueta"); \t \t wl.acquire(); \t} \t \t pública OnDestroy void() { \t \t wl.release(); \t} } – Tom

2

En lugar de utilizar un wakelock, se debe considerar la solución que aquí se propone: Force Screen On

Es mucho más fácil de usar y no tiene el potencial de perder accidentalmente baterías del usuario.

+0

Ah, genial. Lo he agregado a mi respuesta. ¡Gracias! –

Cuestiones relacionadas