2012-07-16 12 views

Respuesta

18

Si solo desea mostrar algo, puede mostrarlo encima de todo incluso en la pantalla de bloqueo.

Si desea que se pueda hacer clic en algo, puede mostrarlo sobre cualquier cosa excepto la pantalla de bloqueo.

He aquí una muestra, modificar a sus necesidades:

crear un servicio y hacer lo siguiente:

//These three are our main components. 
WindowManager wm; 
LinearLayout ll; 
WindowManager.LayoutParams ll_lp; 

//Just a sample layout parameters. 
ll_lp = new WindowManager.LayoutParams(); 
ll_lp.format = PixelFormat.TRANSLUCENT; 
ll_lp.height = WindowManager.LayoutParams.FILL_PARENT; 
ll_lp.width = WindowManager.LayoutParams.FILL_PARENT; 
ll_lp.gravity = Gravity.CLIP_HORIZONTAL | Gravity.TOP; 

//This one is necessary. 
ll_lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; 

//Play around with these two. 
ll_lp.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; 
ll_lp.flags = ll_lp.flags | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; 

//This is our main layout. 
ll = new LinearLayout(this); 
ll.setBackgroundColor(android.graphics.Color.argb(0, 0, 0, 0)); 
ll.setHapticFeedbackEnabled(true); 

//And finally we add what we created to the screen. 
wm.addView(ll, ll_lp); 
+0

Gracias. Funcionó con android.permission.SYSTEM_ALERT_WINDOW – Abi

+0

Hatcyl, ¿puede proporcionarme el código completo si no le importa para que yo también pueda comprender todo el flujo? – Max

+0

@hatcyl, ¿has probado la aplicación notifierpro? Se muestra en la parte superior de la pantalla de bloqueo también. Y se puede hacer clic. ¿Qué podría ser eso? – Enigma

3

Los siguientes son más opciones de cómo se muestra la vista.

Esto lo convertirá en una superposición en la parte superior de todo (incluida la pantalla de bloqueo), pero no se puede hacer clic. WindowManager.LayoutParams. TYPE_SYSTEM_OVERLAY

Esto hará que se puede hacer clic, pero no va a estar sobre la pantalla de bloqueo WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

Esto hará que sea por encima de todo (incluyendo la pantalla de bloqueo) y hacer clic. WindowManager.LayoutParams.TYPE_SYSTEM_ERROR

Una cosa a tener en cuenta sobre el uso de "TYPE_SYSTEM_ERROR". Si conecta un evento de clic, todo lo que invoque ocurrirá detrás de la pantalla de bloqueo.

Cuestiones relacionadas