不少项目都有这种类似的需求,网上相关文章也不少,但由于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(".vc_call_vol_steps", -1);
if (maxCallVolume != -1) {
MAX_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL] = maxCallVolume;
}
//int defaultCallVolume = (".vc_call_vol_default", -1);//注释这里
int defaultCallVolume = SystemProperties.getInt(".vc_call_vol_default", 15);//设置15为最大
....
int defaultMusicVolume = SystemProperties.getInt(".media_vol_default", -1);
....
int defaultAlarmVolume = SystemProperties.getInt(".alarm_vol_default", -1);
....
int defaultSystemVolume = SystemProperties.getInt(".system_vol_default", -1);
后面三条同理,设置为15即可;
**PS**:
不修改上面的话,也可以在源码build/目录下的buildinfo.sh脚本内(没有该脚本也可以加在别的初始化脚本中)添加:
echo ".vc_call_vol_default=15"
echo ".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.