Skip to content

Behind the scenes

How Per-App Volume Works on Android Without Root

By the llcloud team 5 min read

Quick answer

Android sets volume per kind of sound, such as media, ringtone and alarm, so every app that plays media shares one slider. AppVolume gives each app its own level by attaching an audio effect to that app's playback and turning its gain up or down. Finding out which app is playing needs one developer permission, which AppVolume gets once through Wireless debugging and a six-digit pairing code, with no root, no computer and no accessibility service.

Turn a game down and the podcast goes with it. Make the directions louder and the music jumps too. Anyone who plays two things at once on Android runs into this sooner or later. We built AppVolume to fix it, and the way it works says a lot about how Android handles sound. Here it is in plain words.

Why does Android have only one media volume?

Android does not set volume per app. It sets volume per kind of sound, which Android calls a stream. Media is one stream, and ringtones, alarms, notifications and calls each have their own. When you press the volume keys while something plays, you move the media stream, and every app that plays music, video, games or podcasts shares it.

That design keeps things simple. The volume keys always do something predictable, and an alarm never ends up silent because a game turned itself down. The price is that two apps playing media can never sit at different levels by themselves. Our guide to setting a different volume for each app covers what phones offer out of the box, which on most of them is nothing.

How do other per-app volume apps work?

Many volume apps watch which app is in front and switch the one media volume when it changes. Open the game, the media volume drops. Switch to the podcast app, it goes back up. That can work for one app at a time, but it is still one slider. Two apps playing together, like music under a navigation app, always share a level.

Some of those apps also need an accessibility service, so they can see which app is on screen or catch the volume keys. That is a powerful permission for a job this small.

How does AppVolume give each app its own level?

Android has a set of audio effects, such as equalizers and dynamics processors, that an app can attach to a piece of playback, which Android calls an audio session. One of them can raise or lower the gain of the sound that passes through it. AppVolume attaches that effect to the sessions of each app you set a level for, and sets its gain from your slider.

So the change happens to that app's sound only, before it reaches the speaker. A podcast at 80% and a game at 20% really play at those levels at the same time. The same effect is how Pro boosts a quiet app up to 200% and shifts its balance left or right.

AppVolume never hears, records or sends your audio. It does not watch your screen or your volume keys, and it has no accessibility service. It only turns a level up or down.

Why does setup use Wireless debugging and a pairing code?

To attach an effect, AppVolume first has to know which sessions exist and which app each one belongs to. The system's audio service keeps a status report that lists them, and Android only lets an app read it with a permission meant for developers. An app cannot ask for that permission the usual way. Only the phone's shell, the same level of access a computer gets over a debugging cable, or root can grant it.

Wireless debugging gives that shell access without a computer. During setup you turn it on, and Android shows a six-digit pairing code. You type it into AppVolume, which pairs with the phone it runs on and grants itself that one permission with a single command. That is the whole setup. No helper keeps running afterwards.

The permission then stays through restarts and app updates, so you can turn Wireless debugging and Developer options off again. If you already use Shizuku or a rooted phone, AppVolume can use those instead. We use a similar pairing for a different job in Repel, which we describe in how Repel's firewall works without taking your VPN slot.

What happens behind the slider?

A mixer that touches other apps' sound has to be careful, because a mistake is loud. So AppVolume follows a few rules:

  • Unknown is not silence. If the status report cannot be read, AppVolume changes nothing. Reading it as "nothing is playing" would drop every effect and send every app back to full volume at once.
  • Gone means gone twice. A session has to be missing from two reads in a row before its effect is released, so a brief gap does not cause a jump.
  • Your levels are remembered. Set an app once, even before it plays, and the level applies every time it starts.
  • A refund locks nobody out. An app that already has a level can always be turned back up.

What are the honest limits?

Per-app volume through audio effects works for most apps that play sound, not for all of them.

  • Some apps cannot be adjusted. A few play audio through paths Android does not let any effect reach, such as some games that use low-latency audio. AppVolume tries several times over about a minute and a half before it decides, then tells you and marks the app, instead of leaving a slider that does nothing.
  • There can be a split second at full level. When an app starts playing, its sound can begin before the effect is attached.
  • Equalizer apps can take over. If you use one, it may take control of the same audio, and the two can get in each other's way.
  • Effects stay until the app lets go. If you uninstall AppVolume while an app is playing, that app keeps its level until it releases its audio. Settings has a button to reset every app to full volume first.
  • It depends on one system report. If a future Android version stops apps reading it, the mixer could no longer see what is playing. AppVolume is built to change nothing in that case rather than guess.

Which per-app volume app fits you?

If you mainly want one app quieter while you use it, a foreground switcher may be enough. If you want two apps playing at different levels together, you need something that changes each app's own sound. AppVolume vs Precise Volume compares two takes on it, and Samsung owners should read AppVolume vs Samsung Sound Assistant, since Samsung offers its own route. Whatever you choose, AppVolume has no ads and no account, for the reasons in why our apps have no ads.

Sources

Questions

Why doesn't Android have per-app volume?

Android groups sound by what it is for, not by which app makes it. Media, ringtones, alarms, notifications and calls each have a volume, and every app playing media shares the media one. That keeps the volume keys simple, but it means a game and a podcast always play at the same level unless an app steps in.

Can I control each app's volume without root?

Yes. AppVolume needs no root and no computer. It needs one permission that only the phone's developer tools can give, and it walks you through getting it on the phone: turn on Wireless debugging, type a six-digit pairing code, and you are done. The permission stays through restarts and updates, and Shizuku or root also work if you already use them.

Why does AppVolume need Wireless debugging?

To see which app is playing which sound, AppVolume reads a status report from the system's audio service, and Android only lets apps read it with a developer permission. Only the phone's shell can grant that permission. Wireless debugging is how the phone gives AppVolume shell access once, on the phone itself. After setup you can turn it off again.

Does per-app volume work with every app?

Not every one. A few apps play sound through paths Android does not let anything adjust, such as some games with low-latency audio. AppVolume tells you when an app cannot be adjusted instead of leaving a slider that does nothing. An app can also play for a split second at its normal level before your setting applies.

Keep reading