2012-09-24 24 views
11

Si un usuario presiona la tecla de volumen hacia arriba o hacia abajo, ¿es posible detectarlo en mi receptor de difusión? Necesito el código completo.Android BroadCastReceiver para tecla de volumen hacia arriba y hacia abajo

Aquí es mi filtro Intención

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

y mi método es 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"); 
     } 
    } 

Me da una KeyEvent nula ... alguna idea?

Respuesta

11

El intento no tiene un extra EXTRA_KEY_EVENT. Tiene un extra android.media.EXTRA_VOLUME_STREAM_VALUE que contiene el nuevo volumen.

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

Si almacena el valor anterior, puede inferir si se presionó el volumen hacia arriba o hacia abajo.

+0

gracias por su respuesta, pero me da el mismo valor de volumen = 1 cuando el teléfono está en silencio o vibra o en el volumen del timbre está en el primer paso. ¿Cómo puedo detectar el teléfono está en silencio o vibrar o no primer valor? –

+1

puede usar AudioManager para detectar si se encuentra en modo de vibración, silencioso o normal: http://stackoverflow.com/questions/2048427/how-can-i-detect-whether-the-android-phone-in-silent -mode-programatically – Theus

+0

En el cambio de volumen al máximo, inicié la aplicación, pero cuando el reproductor de música se ejecuta en el dispositivo, en ese caso no quiero abrir mi aplicación además del cambio de volumen. Cualquier ayuda –

Cuestiones relacionadas