Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I manage audio volumes sanely in my Android app?

Tags:

android

I have an app that plays intermittent sounds while its activity is open, and the user is always expecting it to make these noises, but unfortunately it is constrained by the music stream volume. The options I have discovered are thus:

  1. Adjust the music stream's volume, possibly deafening the user if they happen to be playing music at the time.
  2. Call MediaPlayer.setVolume() which is ineffective if the music stream's volume is 0.
  3. Handle volume button presses myself which presents two issues: volume button presses adjust the ringer volume unless my audio is playing, and I have been as of yet unable to catch the onKey event for a volume button press using my OnKeyListener. If there were some way to force the adjustment to apply to the music stream while my activity has focus, or to just catch the button presses myself this would work.
  4. Play a silent looping piece of audio in the background to keep the music stream in context for volume adjustments.

I think the 3rd option is probably best since it cedes control of the volume to the user, but if there were some way to just override the system volume in a single mediaplayer instance that would work too.

like image 859
Luke Avatar asked Mar 10 '09 01:03

Luke


People also ask

How do I control volume per app?

Tap the floating plus button in the bottom right corner. Select all the apps you want to control and tap “Add.” You can control the individual volumes right from this screen, but if you want easier access, we'll need to go a little deeper. Go back to the Sound Assistant settings and select “Customize Volume Panel.”

How do I put different volumes on different apps?

Windows 10Right-click on the sound icon at the bottom-right corner of the desktop. Next, click on “Open Volume mixer“. On the pop-up, you will have the option to change volumes for apps individually.


2 Answers

Got another suggestion via Google Groups that is the platform integrated solution I was looking for and works fine:

Please don't handle the volume keys yourself - it is almost impossible to guarantee that you won't break the behavior of the volume keys.

Call this API in your onCreate():

setVolumeControlStream(AudioManager.STREAM_MUSIC);

This tells the AudioManager that when your application has focus, the volume keys should adjust music volume.

like image 74
Luke Avatar answered Sep 23 '22 17:09

Luke


It is usefull of this API: setVolumeControlStream(AudioManager.STREAM_MUSIC);

Unless this I will spend more time to fix that volume bug.

like image 27
Jill Avatar answered Sep 23 '22 17:09

Jill