2012-07-16 2 views

risposta

18

Se si desidera visualizzare solo qualcosa, è possibile visualizzarlo sopra a tutto anche il lockscreen.

Se si desidera che qualcosa sia selezionabile, è possibile visualizzarlo sopra qualsiasi elemento tranne la schermata di blocco.

Ecco un esempio, modificare le vostre esigenze:

creare un servizio ed effettuare le seguenti operazioni:

//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

Grazie. Ha funzionato con android.permission.SYSTEM_ALERT_WINDOW – Abi

+0

Hatcyl, puoi fornirmi l'intero codice se non ti dispiace, in modo che sia in grado di comprendere anche l'intero flusso. – Max

+0

@hatcyl, hai provato l'app notifierpro? Mostra anche in cima allo schermo di blocco. Ed è cliccabile. Cosa potrebbe essere? – Enigma

3

Di seguito sono più opzioni per la modalità di visualizzazione della vista.

Questo lo renderà una sovrapposizione su tutto (compresa la schermata di blocco), ma non selezionabile. WindowManager.LayoutParams. TYPE_SYSTEM_OVERLAY

questo modo sarà cliccabile, ma non sarà finita la schermata di blocco WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

In questo modo sarà sopra di tutto (compreso il blocco dello schermo) e cliccabile. WindowManager.LayoutParams.TYPE_SYSTEM_ERROR

Una cosa da notare sull'utilizzo "TYPE_SYSTEM_ERROR". Se esegui il collegamento a un evento click, qualsiasi cosa invochi avverrà dietro la schermata di blocco.