13

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?

Trinimon
  • 13,839
  • 9
  • 44
  • 60
kevdliu
  • 1,709
  • 4
  • 29
  • 46

1 Answers1

12

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()

Ron
  • 24,175
  • 8
  • 56
  • 97
  • Can you give an example of that please? – kevdliu Aug 20 '11 at 14:19
  • I have added the sample code. But there are syntax errors in it. Also should check action key down or key up. For start this is good, add it later. – Ron Aug 20 '11 at 14:41
  • Also do not forget to unregister the receiver otherwise other applications using the media button event may get affected. – Ron Aug 20 '11 at 16:12
  • @userSeven7s I don't get any intents when changing the volume using the volume rocker but I do get for the button on my headset. Should it work for the volume rocker as well? – tidbeck Jan 05 '12 at 10:44
  • // should be put in onResume I think registerMediaButtonEventReceiver(mediaReceiver ); – letroll Apr 16 '12 at 10:27