2010-02-14 5 views
10

¿Cómo puedo capturar una tecla de teléfono con el SDK de Android? he estado buscando durante horas sin encontrar nada ..Catch keypress with android

Por ejemplo:

En algunos casos, quiero coger el mensaje cuando el usuario presiona el botón de "colgar" en el teléfono, y luego descartar el mensaje antes de que llegue al sistema operativo.

¿Esto es posible?

Respuesta

16

Usted puede controlar los eventos clave desde un punto de vista o, en general, para toda su aplicación:

OnKey

manija de un Vista:

public boolean onKey(View v, int keyCode, KeyEvent event) { 
    switch (keyCode) { 
     case KeyEvent.KEYCODE_ENTER: 
     /* This is a sample for handling the Enter button */ 
     return true; 
    } 
    return false; 
} 

Recuerde poner en práctica OnKeyListener y para establecer su oyente YourView.setOnKeyListener(this);

La segunda posibilidad sería:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_MENU: 
     /* Sample for handling the Menu button globally */ 
     return true; 
    } 
    return false; 
} 

También puede echar un vistazo a onKeyUp.

de recursos: http://developer.android.com/reference/android/view/View.html

Y aquí se puede ver una lista con todas KeyEvents

+2

Tenga en cuenta que esto no funciona para todas las claves. HOME definitivamente no se puede atrapar de esta manera, y END_CALL no puede - Me olvido de eso. Además, si desea interceptar el botón ATRÁS, es mejor que implemente onBackPressed() en los nuevos SDK de Android, aunque eso no funciona en los teléfonos más antiguos. – CommonsWare

+0

END_CALL tampoco puede ser interceptado por la aplicación. Tenga en cuenta también que el póster original parece querer interceptar claves antes de que se entreguen a otra aplicación, lo que no es posible para ninguna clave. – hackbod

+0

Además, no es que el botón END_CALL del hardware ni siquiera exista en algunos teléfonos, como el Motorola Droid y el Nexus One, por lo que hacer algo especial con este botón probablemente no sea una buena idea. –