Identificar que la pantalla de bloqueo fue desbloqueada

Quiero iniciar una Notificación en mi aplicación en una situación específica solo cuando cierta Actividad no está visible.

Logré hacerlo haciendo el enlace/desenlace del Servicio cuando creo y destruyo la Actividad (usando onCreate/onDestroy) y guardo en un booleano si esta Actividad es visible a través de los métodos onPause/onResume, como muestra el siguiente código a continuación:

public void onCreate(Bundle savedInstanceState) {
    // ...
    bindService(...);
}

public void onDestroy() {
    // ...
    unbindService(mConnection);
}

public void onResume() {
    // ...
    // this method sets to true the Service's boolean which retain Activity's visibility.
    mService.registerActivity(true);
}

public void onPause() {
    mService.registerActivity(false);
}

Y en el Servicio, verifico este valor booleano para iniciar la Notificación.

Funciona para todos los casos excepto en uno específico: cuando la aplicación se abre en esta Actividad pero la pantalla de bloqueo está habilitada.

Según algunas pruebas que he realizado, cuando aparece la pantalla de bloqueo, se llama al método Activity.onPause. Esperaba que se llamara al método Activity.onResume cuando se desbloqueó la pantalla de bloqueo, pero eso no es lo que sucede. Cuando presiono el botón de encendido para invocar la pantalla de bloqueo, ya se llama al método Activity.onResume. En este sentido, lo que estoy haciendo no está bien.

¿Cómo puedo hacer que se llame al método Activity.onResume solo cuando el usuario desbloquee la pantalla de bloqueo? O... ¿cómo puedo identificar que la pantalla de bloqueo se desbloqueó y el usuario REALMENTE está mirando la Actividad?

preguntado el 02 de mayo de 12 a las 19:05

Testamento Activity.onWindowFocusChanged(boolean hasFocus) devolver el valor que necesita? -

@techiServices gracias! Esto funcionó a la perfección. Pero no puedo aceptar esta "respuesta". Por favor responde la pregunta para que pueda aceptarla. ¿OK? -

2 Respuestas

Activity.onWindowFocusChanged(boolean hasFocus) debería volver verdadero cada vez que su Activity recupera el enfoque después de desbloquear la pantalla.

contestado el 03 de mayo de 12 a las 11:05

2 pensamientos, no probados y todavía soy una especie de novato en Android:

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> list2 = am.getRunningAppProcesses();

Luego, filtre su actividad de esta lista y verifique la propiedad de importancia de la misma. Las aplicaciones de ejecución frontal son 100, no sé si todavía son 100 cuando hay una pantalla de bloqueo frente a él.

O bien, puede crear un proceso en ejecución que verifique cada x segundos si la pantalla estaba bloqueada y hace algo cuando se desbloquea nuevamente.

contestado el 02 de mayo de 12 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.