Actividad de Android en la pantalla de locking predeterminada

¿Cómo puedo mostrar una Activity o un Dialog de Dialog para que esté visible en la pantalla de locking?

Ya he intentado mostrar mi actividad de locking cuando la pantalla se enciende configurando varios tipos de ventana en el método Activity.onCreate() :

TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD

y otros junto con los SYSTEM_ALERT_WINDOW y INTERNAL_SYSTEM_WINDOW .

Mi actividad es visible después de desbloquear el dispositivo.

ACTUALIZAR:

De hecho, ya logré mostrar mi propia actividad en lugar de la pantalla de locking predeterminada. Funciona perfectamente a menos que use el botón HOME.

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

intente utilizar estos indicadores para desactivar la pantalla de locking cuando se inicie la actividad.

Después de API nivel 17 puedes usar

  

showOnLockScreen como en el ejemplo …

No vaya a la actividad porque Android no mostrará la pantalla de locking detrás de su actividad por razones de seguridad, por lo tanto, use el servicio en lugar de la actividad.

A continuación está mi código en onStartCommand de mi servicio.

 WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); View mView = mInflater.inflate(R.layout.score, null); WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON /* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */, PixelFormat.RGBA_8888); mWindowManager.addView(mView, mLayoutParams); 

Y agregue para manifestar

Use esto en el método onCreate

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); // This line should be before setContentView.. setContentView(......); 

Espero que esto funcione

Puede usar el código en cualquiera de las respuestas aquí que crea que está funcionando. Luego, para evitar que el botón HOME funcione, cambie TYPE_SYSTEM_ALERT o TYPE_SYSTEM_OVERLAY (depende de lo que use actualmente) a TYPE_SYSTEM_ERROR :

 params = new WindowManager.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD, PixelFormat.TRANSLUCENT ); params.gravity = Gravity.TOP; mOverlay = (RelativeLayout) inflater.inflate(R.layout.main, (ViewGroup) null); mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); mWindowManager.addView(mOverlay, params);