Android 11 设置默认音量最大

不少项目都有这种类似的需求,网上相关文章也不少,但由于Android一直在升级,部分接口有了相应的变化,现就原码阅读后,大致修改如下:

frameworks/base/services/core/java/com/android/server/audio/AudioService.java

其中MAX_STREAM_VOLUME数组内定义了各场景的最大音量,这里需要设置为15,可对应设置内
seekbar的选取分段。
protected static int[] MAX_STREAM_VOLUME = new int[] {
        15,  // STREAM_VOICE_CALL
        15,  // STREAM_SYSTEM
        15,  // STREAM_RING
        15, // STREAM_MUSIC
        15,  // STREAM_ALARM
        15,  // STREAM_NOTIFICATION
        15, // STREAM_BLUETOOTH_SCO
        15,  // STREAM_SYSTEM_ENFORCED
        15, // STREAM_DTMF
        15, // STREAM_TTS
        15, // STREAM_ACCESSIBILITY
        15  // STREAM_ASSISTANT
    };

之后在如下接口,会初始化设置各默认值,这里有些网上文章说是10最大,结合滑动条和实际试验,应该是15。   
public AudioService(Context context, AudioSystemAdapter audioSystem,
            SystemServerAdapter systemServer) {
             ....

int maxCallVolume = SystemProperties.getInt("ro.config.vc_call_vol_steps", -1);
        if (maxCallVolume != -1) {
            MAX_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL] = maxCallVolume;
        }
//int defaultCallVolume = SystemProperties.getInt("ro.config.vc_call_vol_default", -1);//注释这里
int defaultCallVolume = SystemProperties.getInt("ro.config.vc_call_vol_default", 15);//设置15为最大
			 ....
int defaultMusicVolume = SystemProperties.getInt("ro.config.media_vol_default", -1);
		     ....
int defaultAlarmVolume = SystemProperties.getInt("ro.config.alarm_vol_default", -1);
		     ....
int defaultSystemVolume = SystemProperties.getInt("ro.config.system_vol_default", -1);

后面三条同理,设置为15即可;

**PS**:
不修改上面的话,也可以在源码build/目录下的buildinfo.sh脚本内(没有该脚本也可以加在别的初始化脚本中)添加:

echo "ro.config.vc_call_vol_default=15"
echo "ro.config.media_vol_default=15"
...
来设置这些ro属性的值,作为默认初始值。

2023年补充:如果想修改设置内铃声和通知的默认值,上面部分不包含。需要修改
frameworks/base/media/java/android/media/AudioSystem.java内DEFAULT_STREAM_VOLUME数组
STREAM_RING以及STREAM_NOTIFICATION的值,例如项目要求为13。

public static int[] DEFAULT_STREAM_VOLUME = new int[] {
        4,   // STREAM_VOICE_CALL
        15,  // STREAM_SYSTEM
        13,   // STREAM_RING
        8,   // STREAM_MUSIC
        8,   // STREAM_ALARM
        13,   // STREAM_NOTIFICATION
        7,   // STREAM_BLUETOOTH_SCO
        15,  // STREAM_SYSTEM_ENFORCED
        11,  // STREAM_DTMF
        11,  // STREAM_TTS
        11,  // STREAM_ACCESSIBILITY
        5, // STREAM_ASSISTANT

    };

另外还有一些平台会去改SettingProvider内的默认值,部分是不会生效的,具体可以去追代码分析,我这试过MTK平台一些参数并没有实际作用,这个从实用角度用上面的方法最合适,稳定能生效。
END.

你可能感兴趣的:(android,java,开发语言)