安卓修改默认音量

本文所在的平台是安卓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去找一下。

 

最后,希望可以帮到大家,如果有用的就收藏一下,白嫖的就点个赞。

 

 

 

 

 

你可能感兴趣的:(android,framework,安卓,源码,android,java)