Android Lollipop: omita la pantalla de bloqueo para la actividad emergente
yo tengoActivity1
que es una pantalla de lista de elementos. Cada elemento se puede ver de forma separadaActivity2
que se muestra como una ventana emergente.Activity1
puede iniciarse desde el fondo y mostrarse incluso cuando la pantalla está bloqueada.Activity1
También puede optar por mostrar automáticamente el contenido de un elemento en la pantalla de lista al iniciarActivity2
. Podemos pasar por alto la pantalla de bloqueo porque ambas actividades tienenWindowManagerFlags.DismissKeyguard
habilitado en elOnCreate
método.
Antes de Android Lollipop todo funcionaba como se esperaba. Pero ahora la ventana emergenteActivity2
no es visible a menos que el dispositivo se desbloquee manualmente. Si cambioActivity2
ser una pantalla completaActivity
entonces todo parece funcionar (excepto la transición de una actividad a otra mostrará brevemente la pantalla de bloqueo). ¿Alguna idea sobre cómo solucionar esto limpiamente?
Además, solo he probado los dispositivos Galaxy S6 / S6 Edge que tienen esta nueva característica de seguridad Knox.
Editar he cambiadoActivity2
ser unaDialogFragment
en lugar de unActivity
. Esto funcionó mejor para mí porque la respuesta sugerida utilizaba un código obsoleto u obsoleto dependiendo del SDK de destino.Activity1
está utilizando los siguientes indicadores para omitir la pantalla de bloqueo cuando sea necesario.
getWindow().addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
Ya queActivity2
ahora es solo unDialogFragment
, utiliza los indicadores de ventana del padreActivity1
. También elimino esas banderas en el"android.intent.action.SCREEN_OFF" acción para que la actividad omita la pantalla de bloqueo solo cuando se inicia como una notificación y no siempre que la actividad esté en la parte superior de la pila. Se requieren los permisos mencionados en la respuesta.