2012-09-24 15 views
11

Se un utente preme il tasto del volume su o giù è possibile rilevarlo nel mio ricevitore di trasmissione? Ho bisogno del codice completo.Android BroadCastReceiver per tasto volume su e giù

Ecco il mio filtro Intento

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

e il mio metodo è onReceive

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"); 
     } 
    } 

Mi dà un KeyEvent nulla ... qualche idea?

risposta

11

L'intento non ha un extra EXTRA_KEY_EVENT. Ha un android.media.EXTRA_VOLUME_STREAM_VALUE in più che contiene il nuovo volume.

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

Se si memorizza il vecchio valore, è possibile dedurre se è stato premuto il volume su o giù.

+0

grazie per la risposta, ma mi dà lo stesso valore di volume = 1 quando il telefono è in modalità silenziosa o vibrazione o il volume della suoneria è al primo passaggio. Come posso rilevare che il telefono è silenzioso o vibra o non ha il primo valore? –

+1

è possibile utilizzare AudioManager per rilevare se si è in modalità vibrazione, silenzioso o normale: http://stackoverflow.com/questions/2048427/how-can-i-detect-whether-the-android-phone-in-silent -mode-programatically – Theus

+0

In caso di modifica del volume al massimo, ho avviato l'app, ma quando il lettore musicale è in esecuzione sul dispositivo, in quel caso non voglio aprire la mia app oltre al cambio di volume. Qualsiasi aiuto –

Problemi correlati