5

creo una aplicación de pantalla de bloqueo y necesito deshabilitar un botón de inicio, por lo que si ese teléfono es robado, no se puede acceder a ese teléfono ... mi pantalla de bloqueo es una actividad de pantalla completa. Utilizo este código para desactivar un botón de inicio. pero me dio un error. Aquí está el código:¿Cómo deshabilitar el botón de inicio sin usar 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; 
    } 

ese código me dio algunos errores como un área de notificación/estado todavía se puede acceder incluso mi actividad en el modo de pantalla completa, si apago mi pantalla y coloque sobre ella de nuevo .. la fallo es como sigue:

aplicación por primera vez comenzó: (todavía no hay problema)

enter image description here

después de cerrar la pantalla del botón de encendido y vuelva a encenderla: enter image description here

el problema principal está en la pantalla de bloqueo .. cuando el área de notificación todavía se puede acceder, a continuación, la pantalla de bloqueo no es útil ..

alguna idea de cómo solucionar esto ?? por favor ayuda ...

También estoy enfrentando el mismo problema cuando presiono el botón de la tecla de finalización.

Respuesta

4

Para mi teléfono TYPE_KEYGUARD parece anular la pantalla completa, hay un tema barra de título. La barra de notificaciones siempre está presente. Pruebe esto:

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

Haga que su vista estire toda la pantalla y cubra el área de notificación. Su área de notificación todavía se puede hacer clic (de forma invisible), pero creo que si detecta todos los eventos clave en su vista, no debería propagarse a la barra.

+0

Hola @e_x_p también estoy enfrentando el mismo problema. Su solución tampoco funciona después de presionar el botón de fin. Después de presionar el botón de fin, el área de notificación vuelve a estar visible –

+0

no funciona. No obtendrá la pantalla completa. – AndroidDev

+1

TYPE_KEYGUARD está en desuso en las versiones anteriores a SDK 14. No funcionará en absoluto en el objetivo ADK versión 21. –

0

No se puede controlar el comportamiento de Home Button. Hará su tarea y deberá ajustar los requisitos de su aplicación.

para pantalla completa agregar esta actividad en su etiqueta en el archivo de manifiesto:

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

puedo desactivar el botón de inicio con esto: @ Override onAttachedToWindow public void() { this.getWindow() setType (WindowManager.LayoutParams.TYPE_KEYGUARD);. super.onAttachedToWindow(); } pero me da algunos errores como en la imagen de arriba ... alguna idea? –

+0

gracias por la respuesta. Ya he agregado ese código para hacer una actividad de pantalla completa, pero el problema es que cuando apago la pantalla y la vuelvo a encender, me da un error como en la imagen de arriba ... :( –

+0

Hola, Michael ... ¿Estás seguro de que el código que aparece arriba puede deshabilitar el botón de inicio ... Porque usé el mismo código pero el botón de inicio no está desactivado ... ¿puedes ayudarme? – user632905

1

Es muy simple, que debería método de desactivar el bloqueo de teclas en el onAttachedToWindow():

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

Funciona bien .... –

1

probar este código:

@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

Este es el trabajo para el problema anterior ..

@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(); 
    } 

Agregar android.permission.DISABLE_KEYGUARD permiso y dar android:theme="@android:style/Theme.NoTitleBar.Fullscreen" a la aplicación

+0

¡KeyguardLock está en desuso! ¿Cuál es la alternativa? – IronBlossom

2

En mi Samusung Pocket, nada funcionaba bien. Podría hacerlo finalmente después de más búsquedas.

Puse pantalla completa en su AndroidMainfest.xml como seguir (no en el código Acitivity):

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

Y utilizar el método keygurad onAttachedToWindow() en su actividad:

@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(); 
} 

Exactamente lo que he querido. Bloqueo del botón HOME y lo mismo después de apagar/encender.

1

Para una pantalla de bloqueo ¿Por qué no sólo tiene que utilizar el siguiente:

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

Si el usuario no dispone de un conjunto de pantalla de bloqueo seguro, la aplicación sólo tiene que ir a la pantalla principal cuando se cierra sus aplicaciones . Si el usuario tiene una pantalla de bloqueo segura configurada, la cerradura de seguridad estándar aparecerá la próxima vez que se cierre la aplicación. Supongo que no me preocuparía deshabilitar los botones. El usuario debe poder utilizar las funciones de seguridad estándar de todos modos, ya que proporcionan más seguridad que la que puede garantizar desde su aplicación. Además, no tiene que perder el tiempo codificando las funciones de desbloqueo seguro.

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

No me funciona. – sandeepmaaram

+0

La actividad normal no puede interceptar la tecla de inicio. Anular este método no resuelve nada. – robert

Cuestiones relacionadas