2010-02-14 17 views
10

Come posso prendere un tasto del telefono con Android SDK? Ho cercato in giro per ore senza trovare nulla ..Catch keypress con Android

Ad esempio:

In alcuni casi, voglio prendere il messaggio quando un utente preme il pulsante "riagganciare" al telefono, e poi scartare il messaggio prima che raggiunga il sistema operativo.

È possibile?

risposta

16

è possibile gestire gli eventi chiave da una vista o in generale per tutta la vostra applicazione:

maniglia OnKey da 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; 
} 

Ricordati di implementare OnKeyListener e per impostare il vostro ascoltatore YourView.setOnKeyListener(this);

La seconda possibilità potrebbe essere:

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

Puoi anche dare un'occhiata a onKeyUp.

risorse: http://developer.android.com/reference/android/view/View.html

E qui potete vedere una lista con tutti i KeyEvents

+2

Si noti che questo non funziona per tutte le chiavi. HOME sicuramente non può essere catturato in questo modo, e END_CALL potrebbe non esserlo - me ne dimentico. Inoltre, se si desidera intercettare il pulsante INDIETRO, è meglio implementare suBackPressed() nei nuovi SDK Android, sebbene ciò non funzioni su telefoni meno recenti. – CommonsWare

+0

END_CALL inoltre non può essere intercettato dall'app. Nota anche che il poster originale sembra voler intercettare le chiavi prima che vengano consegnate a un'altra app, che non è possibile per nessuna chiave. – hackbod

+0

Inoltre, non è che il pulsante END_CALL dell'hardware non esiste nemmeno su alcuni telefoni, come il Motorola Droid e il Nexus One, quindi fare qualcosa di speciale con questo pulsante probabilmente non è una grande idea. –