安卓修改默认音量
Posted 我爱一次性
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓修改默认音量相关的知识,希望对你有一定的参考价值。
本文所在的平台是安卓10
1.修改主要的文件Audioservice.java
首先大家可以在安卓源码/framework 里面搜一下。本平台的路径是:
/frameworks/base/services/core/java/com/android/server/audio/AudioService.java
我之前参考过一些旧的安卓源码,可能不在这个目录下,如果发现与本路径不同,自行搜索一下这个文件。如find命令或者grep一下下面代码的关键词。
关键代码:
int maxMusicVolume = SystemProperties.getInt("ro.config.media_vol_steps", -1);
//获取media的最大值
if (maxMusicVolume != -1) {
MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = maxMusicVolume;
}
int defaultMusicVolume = SystemProperties.getInt("ro.config.media_vol_default", -1);
//获取medio的默认值
if (defaultMusicVolume != -1 &&
defaultMusicVolume <= MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] &&
defaultMusicVolume >= MIN_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]) {
AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = defaultMusicVolume;
} else {
if (isPlatformTelevision()) {
AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] =
MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] / 4;
} else {
AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] =
MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] / 3;
}
}
代码主要获取两个安卓的配置:
1.ro.config.media_vol_steps //音量最大值
2.ro.config.media_vol_default //开机时,音量默认值
如果在安卓的配置文件没有正确的获取参数,则会预设默认值。
那么,我们最简单的方法就是在代码直接写值:
// int maxMusicVolume = SystemProperties.getInt("ro.config.media_vol_steps", -1);
// Log.e(TAG,"oncethings media_vol_steps :"+maxMusicVolume);
// if (maxMusicVolume != -1) {
// MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = maxMusicVolume;
// }
// int defaultMusicVolume = SystemProperties.getInt("ro.config.media_vol_default", -1);
// Log.e(TAG,"oncethings media_vol_default :"+defaultMusicVolume);
// if (defaultMusicVolume != -1 &&
// defaultMusicVolume <= MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] &&
// defaultMusicVolume >= MIN_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]) {
// AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = defaultMusicVolume;
// } else {
// if (isPlatformTelevision()) {
// AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] =
// MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] / 4;
// } else {
// AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] =
// MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] / 3;
// }
// }
//直接赋值
MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = 15;
AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = 0;
但这样,在后期的维护是不方便的,而且也改变了安卓原本的框架。所以我们最好的方法就设置对应值:
ro.config.media_vol_steps和ro.config.media_vol_default。
2.修改安卓的默认配置prop
配置安卓prop大体上有几个地方可以配置:
1.buildinfo.sh 本平台路径:/build/tools/buildinfo.sh
修改方法:增加一行 echo "ro.config.media_vol_default=5" ,参照其他怎么写,学会照猫画虎。
2.system.prop 本平台路径:/device/xxx/xxx/system.prop 因为要保密,可以用find命令寻找
修改方法:ro.config.media_vol_default=5 ,同理参照这个文件的其他。
上面两个路径都可以配置安卓的默认配置。可是下面system.prop配置的会覆盖buildinfo.sh。
如果说buildinfo.sh配置音量为5,system.prop配置音量为10。那么结果就为10。
ps:上面说的两个路径,是作者本平台的发现的路径,也许其他版本的配置文件不在这里。可以再/out/目录下面搜索ro.config.media_vol_default这个配置,基本上可以定位源码哪里文件。比如,本人在配置buildinfo.sh音量为5后,获取的值还是原本的15,在grep out文件后,发现有个文件配置是ro.config.media_vol_default=15。那么既可以发现自己配置对不对,也可以定位具体的文件。
3.修改linux配置的权限(selinux策略)
大部分,修改完prop后,就可以完成修改默认音量了。但是有些会获取失败,可能要增加linux的策略。
本平台路径:/system/sepolicy/public/property.context
修改方法:
ro.config.alarm_alert u:object_r:exported2_config_prop:s0 exact string
ro.config.media_vol_steps u:object_r:exported2_config_prop:s0 exact int
ro.config.alarm_vol_steps u:object_r:exported2_config_prop:s0 exact int
ro.config.system_vol_steps u:object_r:exported2_config_prop:s0 exact int
ro.config.notification_sound u:object_r:exported2_config_prop:s0 exact string
ro.config.ringtone u:object_r:exported2_config_prop:s0 exact string
ro.config.media_vol_default u:object_r:exported2_config_prop:s0 exact int
ro.config.alarm_vol_default u:object_r:exported2_config_prop:s0 exact int
ro.config.system_vol_default u:object_r:exported2_config_prop:s0 exact int
ps:记得看获取后的格式,修改音量就是int类型。如何看是否成功获取:在源码那里增加Log.i打印即可,开机后用andriodstdio看就行了。
4. 其他可能有用的信息
/frameworks/base/services/core/java/com/android/server/audio/AudioService.java:
public static final int[] DEFAULT_STREAM_VOLUME = new int[] {
4, // STREAM_VOICE_CALL
7, // STREAM_SYSTEM
4, // STREAM_RING
8, // STREAM_MUSIC
4, // STREAM_ALARM
4, // STREAM_NOTIFICATION
7, // STREAM_BLUETOOTH_SCO
7, // STREAM_SYSTEM_ENFORCED
11, // STREAM_DTMF
11, // STREAM_TTS
4, // STREAM_FM
4 // STREAM_MATV
};
frameworks\\base\\media\\java\\android\\media\\AudioManager.java:
private int[] MAX_STREAM_VOLUME = new int[] {
6, // STREAM_VOICE_CALL
7, // STREAM_SYSTEM
7, // STREAM_RING
13, // STREAM_MUSIC
7, // STREAM_ALARM
7, // STREAM_NOTIFICATION
15, // STREAM_BLUETOOTH_SCO
7, // STREAM_SYSTEM_ENFORCED
15, // STREAM_DTMF
15, // STREAM_TTS
13, //STREAM_FM
13 //stream_MATV
ps:旧版本好像修改这两个地方就可以了,这两个路径属于本平台,这两个结构体如果找不到,grep去找一下。
最后,希望可以帮到大家,如果有用的就收藏一下,白嫖的就点个赞。
以上是关于安卓修改默认音量的主要内容,如果未能解决你的问题,请参考以下文章