2010-04-04 27 views
5

Como mencioné en una pregunta anterior, estoy teniendo dificultades para interceptar todos los eventos android.intent.action.SCREEN_ON sin una larga vida Service (desalentada).¿Cómo detectar cuando la pantalla está encendida?

Es posible que pueda evitar la necesidad si simplemente puedo hacer ejercicio cuando la pantalla está encendida en un momento dado, en el Service.

¿Alguien puede sugerir una llamada a método que devolvería esta información? 1.5 hacia arriba.

Respuesta

1

El sistema deliberadamente no permite que las aplicaciones reciban las transmisiones ACTION_SCREEN_ON y ACTION_SCREEN_OFF en su manifiesto, porque no queremos tener que iniciar un montón de aplicaciones para activar o desactivar la pantalla. Esto es algo que sucede todo el tiempo, y debe ser lo más rápido posible.

Lamentablemente, como se señaló, no hay forma de comprobar de inmediato si la pantalla está encendida.

+0

hecho posible la recepción de las emisiones, como BroadcastReceivers en un servicio de larga duración. Mi aplicación hace esto muy felizmente, pero estoy intentando eliminar el servicio duradero. Simplemente falla silenciosamente si lo suministra como un filtro de intención en un receptor. –

3

Si su código se está ejecutando, es muy probable que la pantalla esté activada. La excepción principal sería si su código se activa a través del AlarmManager.

Sería bueno si ACTION_SCREEN_ON fuera una emisión pegajosa, pero ese no parece ser el caso.

Si puede rodar con Android 2.1 y versiones posteriores, PowerManager ahora tiene un método isScreenOn(). La buena noticia es que está disponible. La mala noticia es que, dado que se agregó allí, es poco probable que haya otra forma de determinarlo fácilmente. Y, una inspección rápida del código fuente no da muchas esperanzas de que pueda piratear su camino a la información en SDK anteriores.

5

PowerManager.isScreenOn() desde: Nivel API 7

+0

Esto funcionó para mí en la Nota 8 pero no en la Pestaña 4 ... –

Cuestiones relacionadas