Search code examples
androidservicebroadcastreceivermediavolume

Volume change listener?


Is there any way to listen for volume changes with an Android service and react to that?

Btw: How does the Google music app allow the user to control the media volume even when the music is playing in the background?


Solution

  • Check out registerMediaButtonEventReceiver(ComponentName broadcastReceiver);

    Define a BroadcastReceiver that handles ACTION_MEDIA_BUTTON. The recieved intent includes a single extra field, EXTRA_KEY_EVENT, containing the key event that caused the broadcast. You can use this key event to get which key was pressed.


    EDIT:
    This is just a sample code. syntax errors may be there.

    // in onCreate of activity
    registerMediaButtonEventReceiver(mediaReceiver ); 
    
    // later somewhere in activity.
    MediaButton_Receiver mediaReceiver = new MediaButton_Receiver();
    
    class MediaButton_Receiver implements BroadcastReceiver {
         void onReceive(Intent intent) {
    
              KeyEvent ke = (KeyEvent)intent.getExtra(Intent.EXTRA_KEY_EVENT); 
              if (ke .getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) {
    
              }
              // Similarly other key codes .......
         } 
    }
    

    Unregister the receiver in onPause() or onStop()