Skip to content Skip to sidebar Skip to footer

Android - Get Max Safe Stream Volume

I have a use case to change stream volume programmatically, but on newer android volume, raising the volume above a certain limit (60% as per my observations which corresponds to s

Solution 1:

There's a resource which holds the safe volume step: config_safe_media_volume_index

// .../overlay/frameworks/base/core/res/res/values/config.xml
<integer name="config_safe_media_volume_index">7</integer>

It is defined HERE

And it is used HERE

You can get it dinamically via:

int safeVolumeStep;
int safeVolumeStepResourceId = 
       getResources().getIdentifier("config_safe_media_volume_index", "integer", "android");

if(safeVolumeStepResourceId != 0) {
    safeVolumeStep = getResources().getInteger(safeVolumeStepResourceId);
} else {
    Log.w("TESTS", "Resource config_safe_media_volume_index not found. Setting a hardcoded value");
    // We probably won't fall here because config_safe_media_volume_index is defined in the AOSP
    // It not a vendor specific resource...
    // For any case, try to set the safe step manually to 60% of the max volume.
    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    safeVolumeStep = (int) (maxVolume * 0.6f);
}

Log.d("TESTS", "Safe Volume Step: " + safeVolumeStep +
               " Safe volume step resourceID: "  + Integer.toHexString(safeVolumeStepResourceId) );

I tested here in a Galaxy S10 and I'm getting 9.


Post a Comment for "Android - Get Max Safe Stream Volume"