2011-09-21 20 views
5

Próbuję dostać mój app reaguje na naciśnięcie klawisza długi na ściszanie z następującego kodu:Próbując złapać onKeyLongPress Volume() nie pracuje

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

jednak tylko spams pęczek z onKeyPress() zdarzeń zmniejszających głośność, a onKeyLongPress() nigdy nie jest wywoływana. Moją intencją jest zmniejszenie głośności i zwiększenie liczby "krótkich" naciśnięć, a moja aplikacja reaguje inaczej, niż długo trwająca prasa.
Czy ktoś może wskazać, czego mi brakuje?

Odpowiedz

12

Jesteś prawie na miejscu. Musisz wykryć to samo zdarzenie kluczowe w module obsługi onKeyPress i rozpocząć jego śledzenie, aby długie naciśnięcie mogło działać. Oto kod, którego potrzebujesz:

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

Masz pomysł, jak złapać to kluczowe wydarzenie, idąc dalej do Android Volume Manager i zmieniając dźwięk? – Radu

+1

@Radu: nie testowano, ale: co powiesz na "return true;" w swoim długim oddzwonieniu? Powinien zapobiec propagacji. Ale znowu, nie jestem pewien, czy to naprawdę działa, czy nie. –

+0

@BenjaminPiette Masz rację – Lukas1