How to tell android which volume (media/ringtone etc.) should be controlled by your app
In my android apps I was getting annoying problems that whilst playing sound the volume buttons would control the media volume, but when no sound was playing they would control the ringtone volume. I found the following by trial and error, hopefully this post will help people with the same problem.
This is done by placing a call of setVolumeControlStream in the onCreate part of your activity which takes on of the following values
- AudioManager.STREAM_MUSIC
- AudioManager.STREAM_RING
- AudioManager.STREAM_ALARM
- AudioManager.STREAM_NOTIFICATION
- AudioManager.STREAM_SYSTEM
- AudioManager.STREAM_VOICECALL
Below shows the code required to set your applications default volume control to any of the above values:
Media Volume
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
Ringtone Volume
this.setVolumeControlStream(AudioManager.STREAM_RING);
Alarm Volume
this.setVolumeControlStream(AudioManager.STREAM_ALARM);
Notification Volume
this.setVolumeControlStream(AudioManager.STREAM_NOTIFICATION);
System Volume
this.setVolumeControlStream(AudioManager.STREAM_SYSTEM);
Voicecall Volume
this.setVolumeControlStream(AudioManager.STREAM_VOICECALL);
I imagine this is also possible via and XML settings, if anyone knows of this I’d be very grateful to know how!




thx
Thanks. That’s been bugging me for a while. Play testers kept saying “It doesn’t make sense!!!! Volume this, volume that.”
Not much on-line to help with this issue either.
Cheers for this tip, I was looking for something this simply explained in the android SDK!
If you need to reset the volume control back to the default, there is one other value you can use:
this.setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE);
@Jarcikon, good tip, thanks
Thanks so much! This has also been bugging me and there isn’t anything online I could find!
Wow that’s easy.
Thanks for the tip.
First hit on Google.
Thanks! And if you want to just have maximum media volume when your application is started, use
AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
in your onResume() (and good practie would be to turn it down in onPause()), where the last param “flags” (here 0) sets how this change should be indicated, 0 means “not”, AudioManager.FLAG_PLAY_SOUND for example plays some beep at the new volume level!
Forgot to say, AudioManager.STREAM_MUSIC is the one that sets”Music/video volume”, might be helpful