2011-09-21 11 views
5

Sto cercando di ottenere la mia app per reagire ad una pressione lunga sul volume verso il basso con il seguente codice:cercando di catturare l'onKeyLongPress Volume() non funziona

public boolean onKeyLongPress(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
     Log.w("myApp", "LONG PRESS"); 
    } 
    return super.onKeyLongPress(keyCode, event); 
} 

Tuttavia, spam solo un mucchio degli eventi onKeyPress() per il volume inattivo e onKeyLongPress() non viene mai chiamato. La mia intenzione è quella di abbassare il volume e le "brevi" pressioni da solo, e fare in modo che la mia app reagisca in modo diverso alla pressione prolungata del volume.
Qualcuno può indicare cosa mi manca?

risposta

12

Sei quasi arrivato. È necessario rilevare lo stesso evento chiave nel gestore onKeyPress e iniziare a seguirlo in modo che la lunga pressione possa funzionare. Ecco il codice che ti serve:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
     event.startTracking(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

Qualche idea su come posso prendere questo evento chiave andando oltre ad Android Volume Manager e cambiando l'audio? – Radu

+1

@Radu: non testato ma: che dire di "return true;" nella tua lunga pressione di callback? Dovrebbe impedire la propagazione. Ma di nuovo, non sono sicuro che questo possa davvero funzionare o meno. –

+0

@BenjaminPiette Hai ragione – Lukas1

Problemi correlati