2012-01-25 13 views
13

Para mi aplicación, necesito saber que la pantalla está bloqueada. Cómo comprobar esto es problemático. Solía ​​indicador siguiente:Cómo encontrar que la pantalla está bloqueada en android

if(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON != 0){ 
    // some code 
}else if((WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)!= 0){ 
    // some code 
} 

Pero esto siempre ejecutar tanto si y otra parte ... qué bandera que tengo que usar para comprobar la pantalla está bloqueada o no?

+0

ver las siguientes enlaces [http://stackoverflow.com/questions/3170563/android-detect-phone-lock-event][1] [http://stackoverflow.com/questions/8317331/detecting-when-screen-is-locked][2] [http://stackoverflow.com/questions/3446202/android-detect- phone-unlock-event-not-screen-on] [3] [1]: http: // stackoverflow.com/questions/3170563/android-detectar-phone-lock-event [2]: http://stackoverflow.com/questions/8317331/detecting-when-screen-is-locked [3]: http: //stackoverflow.com/questions/3446202/android-detect-phone-unlock-event-not-screen-on – Shruti

+5

cómo se ejecutará si y si no? –

+0

http://stackoverflow.com/questions/8968265/android-auto-logout-when-app-goes-to-background/8968763#8968763 –

Respuesta

1

Registre un receptor de difusión con la acción android.intent.action.ACTION_SCREEN_OFF y escriba su código en el método de recepción onReceive().

Si está utilizando una actividad, se invocará onPause() cuando la pantalla se bloquee y onResume() se invoque cuando la pantalla se desbloquee.

¿En su código está revisando algunas banderas, no sé dónde hará esa comprobación? ¿es una verificación continua? Si está utilizando una actividad en su aplicación, se realizará el procedimiento anterior, solo verifíquelo en el sitio web de Desarrolladores de Android.

+0

@ Babu: Muchas gracias por su respuesta. Voy a intentar :) – Prasad

0

Hay intenciones transmitidas para bloqueo de pantalla & desbloqueo.

Hay que ver gustan:

if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){//LOGIC Here} 

hágamelo saber!

+0

la condición anterior debe ser comprobar en el receptor Braodcast? – Prasad

+0

: He usado las mismas cosas pero no funciona :( – Prasad

22

Intentaré responder a esto, aunque la pregunta ya es antigua, ya que no se ha resuelto y podría ayudar a otros googlers. ;)

Primero debe registrar un BroadcastReceiver para Intent.ACTION_SCREEN_OFF & Intent.ACTION_SCREEN_ON. Tenga en cuenta que este receptor debe estar registrado en códigos y no funcionará cuando se declare en el manifiesto.

En su receptor de radiodifusión, cuando reciba Intent.ACTION_SCREEN_ON, se puede comprobar si la pantalla está bloqueada mediante el uso de los códigos siguientes:

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
boolean locked = km.inKeyguardRestrictedInputMode(); 
+1

debajo del enlace parece que no necesita BroadcastReceiver http://stackoverflow.com/a/8668648/401403 – Arash

0

Esto es lo que hice:

Este se encarga de si el usuario ha desbloqueado la pantalla, pero aún no ha ingresado a la pantalla de inicio o la pantalla del usuario está apagada, por ejemplo, durante una llamada.

  if (Intent.ACTION_SCREEN_ON.equals(pIntent.getAction()) || 
        Intent.ACTION_USER_PRESENT.equals(pIntent.getAction())) { 
       if(mListener!=null) { 
        KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); 
        boolean locked = km.inKeyguardRestrictedInputMode(); 
        Log.v(TAG, ": Phone lock state from KEYGUARD_SERVICE: Current state:" + (locked ? "LOCKED":"UNLOCKED")); 
        mIsPhoneLocked = locked; 
       } 
      } 
1

supongo que es posible que ya encontró la respuesta, pero si no (y para otros desarrolladores), puede hacerlo de esta manera:

   PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
       boolean isScreenOn = powerManager.isScreenOn(); 

if (!isScreenOn) { 
      //Screen is in OFF State 
      //Code to power on and release lock 



       KeyguardManager km = (KeyguardManager) this 
       .getSystemService(Context.KEYGUARD_SERVICE); 
       final KeyguardManager.KeyguardLock kl = km 
       .newKeyguardLock("MyKeyguardLock"); 
       kl.disableKeyguard(); 

       PowerManager pm = (PowerManager) this 
       .getSystemService(Context.POWER_SERVICE); 
       WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
       | PowerManager.ACQUIRE_CAUSES_WAKEUP 
       | PowerManager.ON_AFTER_RELEASE, "MyWakeLock"); 
       wakeLock.acquire(); 
} 
3
KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); 

if(myKeyManager.inKeyguardRestrictedInputMode()) { 

//screen is locked 

} else { 

//screen is not locked 

} 
Cuestiones relacionadas