2012-09-24 15 views
11

Jeśli użytkownik naciśnie klawisz zwiększania lub zmniejszania głośności, czy można go wykryć w moim odbiorniku? Potrzebuję pełnego kodu.Android BroadCastReceiver do zwiększania i zmniejszania głośności

Oto mój filtr Intent

IntentFilter filter = new IntentFilter(); 
filter.addAction("android.media.VOLUME_CHANGED_ACTION"); 

onReceive i moja metoda jest

public void onReceive(Context arg0, Intent intent) { 
     KeyEvent ke = (KeyEvent)intent.getExtras().get(Intent.EXTRA_KEY_EVENT); 
     if (ke .getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) { 
       System.out.println("I got volume up event"); 
     }else if (ke .getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) { 
       System.out.println("I got volume key down event"); 
     } 
    } 

Daje mi null keyEvent ... jakiś pomysł?

Odpowiedz

11

Intencja nie ma dodatkowego EXTRA_KEY_EVENT. Ma dodatkową wartość android.media.EXTRA_VOLUME_STREAM_VALUE, która zawiera nowy wolumin.

int volume = (Integer)intent.getExtras().get("android.media.EXTRA_VOLUME_STREAM_VALUE"); 

Jeśli zapiszesz poprzednią wartość, możesz sprawdzić, czy naciśnięto zwiększanie lub zmniejszanie głośności.

+0

dzięki za odpowiedź, ale daje mi tę samą wartość głośności = 1, gdy telefon jest cichy lub wibruje lub na głośność dzwonka jest w pierwszym kroku. Jak mogę wykryć telefon jest cichy lub wibruje lub nie ma pierwszej wartości? –

+1

możesz użyć menedżera AudioManager, aby wykryć, czy jesteś w trybie wibracji, cichy lub normalny: http://stackoverflow.com/questions/2048427/how-can-i-detect-whether-the-android-phone-in-silent -mode-programowo – Theus

+0

Przy zmianie głośności w max i uruchomiłem aplikację, ale gdy odtwarzacz muzyki działa na urządzeniu, to w tym przypadku nie chcę otwierać mojej aplikacji na zmianę głośności. Any help –

Powiązane problemy