5

creo un'applicazione lockscreen e ho bisogno di disabilitare un pulsante home, quindi se quel telefono viene rubato, non è possibile accedere a quel telefono .. il mio lockscreen è un'attività a schermo intero .. im uso questo codice per disabilitare un pulsante home, ma mi ha dato qualche bug. ecco il codice:Come disabilitare il pulsante Home senza usare TYPE_KEYGUARD?

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

    } 

    @Override 
    public void onAttachedToWindow() 
    { 
     this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);  
     super.onAttachedToWindow(); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     return false; 
    } 

che il codice mi ha dato un po 'di bug come una notifica/area di stato ancora possibile accedere anche la mia attività sulla modalità a schermo intero, se spengo il mio schermo e accendere di nuovo .. il bug è come questo:

applicazione prima volta iniziata: (ancora nessun problema)

enter image description here

dopo spengo il mio schermo dal pulsante di accensione e riaccenderlo: enter image description here

il problema principale è sulla lockscreen .. quando l'area di notifica ancora possibile accedere, quindi il lockscreen non è utile ..

alcuna idea di come risolvere questo ?? per favore aiuto ..

Sto anche affrontando lo stesso problema quando preme il tasto di fine chiamata.

risposta

4

per il mio telefono TYPE_KEYGUARD sembra ignorare il fullscreen, nessun tema barra del titolo. La barra di notifica è sempre presente. Prova questo:

@Override 
public void onAttachedToWindow() 
{ 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);  
    super.onAttachedToWindow(); 
} 

Fai in modo che la tua vista si estenda su tutto lo schermo e coprirà l'area di notifica. L'area di notifica potrebbe essere ancora cliccabile (in modo invisibile) ma credo che se catturi tutti gli eventi chiave nella tua vista non dovrebbe propagarsi alla barra.

+0

Ciao @e_x_p anch'io sto affrontando lo stesso problema, anche la tua soluzione non funziona dopo aver premuto il pulsante Fine. Dopo aver premuto il pulsante Fine l'area di notifica è di nuovo visibile –

+0

non funziona a schermo intero – AndroidDev

+1

TYPE_KEYGUARD è deprecato nelle versioni precedenti all'SDK 14. Non funzionerà affatto nella versione ADK target 21. –

0

Non è possibile controllare il comportamento di Home Button. Farà il suo compito ed è necessario modificare i requisiti dell'app.

per schermo intero aggiungere questo nel tag attività nel file manifest:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
+0

posso disabilitare il pulsante di casa con questo: @Override onAttachedToWindow public void() { this.getWindow() setType (WindowManager.LayoutParams.TYPE_KEYGUARD);. super.onAttachedToWindow(); } ma mi dà qualche bug come nella foto sopra .. qualche idea? –

+0

grazie per la risposta .. ho aggiunto quel codice già per fare un'attività a schermo intero, ma il problema è quando spengo lo schermo e lo riaccendo, mi darà qualche bug come l'immagine sopra .. :( –

+0

Ciao Michael .... Sei sicuro che il codice sopra indicato ti possa disabilitare il pulsante home ..coz ho usato lo stesso codice ma il tasto home non è disabilitato .... puoi aiutarmi? – user632905

1

E 'molto semplice, è necessario disattivare il blocco tastiera nel onAttachedToWindow() Metodo:

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
lock.disableKeyguard(); 
+0

Funzionante bene ... –

1

provare questo codice:

@Override 
public void onAttachedToWindow() { 
    // TODO Auto-generated method stub 
    super.onAttachedToWindow(); 

    handler.postDelayed(mUpdateUiMsg, 100); 

} 


public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // TODO Auto-generated method stub 
    if(keyCode==KeyEvent.KEYCODE_BACK){ 
    return true; 
    } 
    if(keyCode==KeyEvent.KEYCODE_HOME){ 
    return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 


private Runnable mUpdateUiMsg = new Runnable() { 
     public void run() { 


      getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 


     } 
    }; 
4

Questo è il lavoro per il rilascio di cui sopra ..

@Override 
public void onAttachedToWindow() { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 
    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
    lock.disableKeyguard(); 
    } 

Aggiungere android.permission.DISABLE_KEYGUARD permesso e dare android:theme="@android:style/Theme.NoTitleBar.Fullscreen" all'applicazione

+0

KeyguardLock è obsoleto !! Qual è l'alternativa? – IronBlossom

2

Nella mia tasca Samusung, niente di sopra funzionava bene. Potrei farlo finalmente dopo un'ulteriore ricerca.

Io li ho messi a schermo intero nel tuo AndroidMainfest.xml come segue (non nel codice acitivity):

<activity 
    android:name=".geo.activity.LockActivity" 
    android:theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen" /> 

E utilizzare il metodo keygurad onAttachedToWindow() nella vostra attività:

@Override 
public void onAttachedToWindow() { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 
    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
    lock.disableKeyguard(); 
} 

Esattamente quello che ho voluto. Blocco del tasto HOME e lo stesso dopo lo spegnimento/accensione.

1

Per un lockscreen Perché non basta utilizzare il seguente:

@Override 
public void onAttachedToWindow() { 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
} 

Se l'utente non dispone di un set di blocco dello schermo protetto, l'applicazione sarà sufficiente accedere alla schermata iniziale quando i vostri chiude app . Se l'utente dispone di un set di lockscreen sicuro, verrà visualizzata la schermata di blocco sicura standard, indipendentemente dalla modalità di chiusura dell'app. Immagino che non mi preoccuperei di disabilitare i pulsanti. L'utente dovrebbe essere comunque autorizzato a utilizzare le funzionalità di sicurezza standard, in quanto forniscono maggiore sicurezza che è possibile garantire dalla propria app. Inoltre, non è necessario passare il tempo a codificare funzioni di sblocco sicure.

1
 @Override 
    public boolean onKeyDown(int keyCode, android.view.KeyEvent event) { 
     if((keyCode == KeyEvent.KEYCODE_HOME)){  
     return true; 
     } 
     return false; 
    } 
+0

Non funziona per me. – sandeepmaaram

+0

L'attività normale non può intercettare la chiave di casa. Ignorare questo metodo non risolve nulla. – robert