2010-11-23 74 views
9

Aquí está mi situación. Tengo una aplicación que está reproduciendo sonidos de fondo. Usando el BroadcastReceiver puedo decir cuándo se apaga la pantalla y luego matar los sonidos. También puedo decir si la pantalla se vuelve a encender. Sin embargo, si el dispositivo está en el estado de bloqueo, no quiero que se inicie el audio. Por lo tanto, espero el ACTION_USER_PRESENT intento de señal. Todo funciona, excepto que si el usuario vuelve a encender la pantalla rápidamente después de apagarla, no obtendrá la pantalla de bloqueo o el mensaje ACTION_USER_PRESENT. Entonces, ¿hay alguna manera de saber cuándo se enciende la pantalla, si el dispositivo está bloqueado o no, lo que supongo también significa dormir o no?Cómo saber si el dispositivo está durmiendo

+0

Si el dispositivo está realmente inactivo, el procesador de la aplicación no está ejecutando el código. La pantalla bloqueada es algo completamente diferente. –

+1

Bastante justo. Entonces, ¿cómo saber si la pantalla está bloqueada? – iterator

+0

http://stackoverflow.com/questions/3170563/android-detect-phone-lock-event –

Respuesta

9

Puede probar el KeyguardManager para comprobar si el dispositivo está bloqueado. Aquí hay un código (no he probado esto por mi cuenta):

KeyguardManager kgMgr = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
boolean showing = kgMgr.inKeyguardRestrictedInputMode(); 

¡Buena suerte!

+1

Lo intenté, pero "mostrando" devolvió false ya sea que la pantalla estuviera bloqueada o no. – iterator

+0

Esto funcionó muy bien para mí. ¡Gracias! – Chris

+0

gracias, funcionó para mí también –

12
((PowerManager) getSystemService(Context.POWER_SERVICE)).isScreenOn() 
0
((PowerManager) getSystemService(Context.POWER_SERVICE)).isScreenOn() 

dice si la pantalla está encendida. Entonces, se hace realidad si la pantalla está encendida pero el dispositivo está bloqueado. En cambio,

inKeyguardRestrictedInputMode() 

obtiene cierto solo si el dispositivo está bloqueado.

Cuestiones relacionadas