Rk3576 Andorid 14修改默认的通知音量,通话音量,闹钟音量等系统音量大小

Rk3576 Andorid 14 ,修改默认的通知音量,通话音量,闹钟音量等系统音量大小

问题描述

在Rk3576 Andorid 14 中之前修改/frameworks/base/media/java/android/media/AudioSystem.java的方法已经不生效了,需要重新分析问题。

代码位置

java 复制代码
/frameworks/base/media/java/android/media/AudioSystem.java
/frameworks/base/core/res/res/values/config.xml
frameworks/base/services/core/java/com/android/server/audio/AudioService.java
device/rockchip/rk3576/rk3576_u/rk3576_u.mk 

问题分析

通过查看AudioService.java的代码可以发现可以用过几个默认的属性来设置音量,但是只有三个通知音量,通话音量,和媒体音量。 最终追代码发现 闹钟音量和警告音量需要在frameworks/base/core/res/res/values/config.xml里面修改

java 复制代码
    // Initialize volume
    // Priority 1 - Android Property
    // Priority 2 - Audio Policy Service
    // Priority 3 - Default Value
    if (AudioProductStrategy.getAudioProductStrategies().size() > 0) {
        int numStreamTypes = AudioSystem.getNumStreamTypes();

        for (int streamType = numStreamTypes - 1; streamType >= 0; streamType--) {
            AudioAttributes attr =
                    AudioProductStrategy.getAudioAttributesForStrategyWithLegacyStreamType(
                            streamType);
            int maxVolume = AudioSystem.getMaxVolumeIndexForAttributes(attr);
            if (maxVolume != -1) {
                MAX_STREAM_VOLUME[streamType] = maxVolume;
            }
            int minVolume = AudioSystem.getMinVolumeIndexForAttributes(attr);
            if (minVolume != -1) {
                MIN_STREAM_VOLUME[streamType] = minVolume;
            }
        }
        if (mUseVolumeGroupAliases) {
            // Set all default to uninitialized.
            for (int stream = 0; stream < AudioSystem.DEFAULT_STREAM_VOLUME.length; stream++) {
                AudioSystem.DEFAULT_STREAM_VOLUME[stream] = UNSET_INDEX;
            }
        }
    }

    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);
    if (defaultCallVolume != -1 &&
            defaultCallVolume <= MAX_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL] &&
            defaultCallVolume >= MIN_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL]) {
        AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL] = defaultCallVolume;
    } else {
        AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL] =
                (MAX_STREAM_VOLUME[AudioSystem.STREAM_VOICE_CALL] * 3) / 4;
    }

    int maxMusicVolume = SystemProperties.getInt("ro.config.media_vol_steps", -1);
    if (maxMusicVolume != -1) {
        MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = maxMusicVolume;
    }

    int defaultMusicVolume = SystemProperties.getInt("ro.config.media_vol_default", -1);
    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;
        }
    }

    int maxAlarmVolume = SystemProperties.getInt("ro.config.alarm_vol_steps", -1);
    if (maxAlarmVolume != -1) {
        MAX_STREAM_VOLUME[AudioSystem.STREAM_ALARM] = maxAlarmVolume;
    }

    int defaultAlarmVolume = SystemProperties.getInt("ro.config.alarm_vol_default", -1);
    if (defaultAlarmVolume != -1 &&
            defaultAlarmVolume <= MAX_STREAM_VOLUME[AudioSystem.STREAM_ALARM]) {
        AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_ALARM] = defaultAlarmVolume;
    } else {
        // Default is 6 out of 7 (default maximum), so scale accordingly.
        AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_ALARM] =
                    6 * MAX_STREAM_VOLUME[AudioSystem.STREAM_ALARM] / 7;
    }

    int maxSystemVolume = SystemProperties.getInt("ro.config.system_vol_steps", -1);
    if (maxSystemVolume != -1) {
        MAX_STREAM_VOLUME[AudioSystem.STREAM_SYSTEM] = maxSystemVolume;
    }

    int defaultSystemVolume = SystemProperties.getInt("ro.config.system_vol_default", -1);
    if (defaultSystemVolume != -1 &&
            defaultSystemVolume <= MAX_STREAM_VOLUME[AudioSystem.STREAM_SYSTEM]) {
        AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_SYSTEM] = defaultSystemVolume;
    } else {
        // Default is to use maximum.
        AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_SYSTEM] =
                    MAX_STREAM_VOLUME[AudioSystem.STREAM_SYSTEM];
    }

    int minAssistantVolume = SystemProperties.getInt("ro.config.assistant_vol_min", -1);
    if (minAssistantVolume != -1) {
        MIN_STREAM_VOLUME[AudioSystem.STREAM_ASSISTANT] = minAssistantVolume;
    }

修改方案如下

java 复制代码
diff --git a/device/rockchip/rk3576/rk3576_u/rk3576_u.mk b/device/rockchip/rk3576/rk3576_u/rk3576_u.mk
index 7fcfba9cebb..86255aa70a5 100755
--- a/device/rockchip/rk3576/rk3576_u/rk3576_u.mk
+++ b/device/rockchip/rk3576/rk3576_u/rk3576_u.mk
@@ -92,13 +92,13 @@ PRODUCT_PROPERTY_OVERRIDES += persist.sys.rotation.einit-1=0
 
 #cdh add for default media volume 24.9.20
 #0~7 STREAM_SYSTEM
 //注意要查看frameworks/base/services/core/java/com/android/server/audio/AudioService.java里面设置的音量最大值,上面代码有判断不能小于最小值和大于最大值才生效
-PRODUCT_PROPERTY_OVERRIDES += ro.config.system_vol_default=6
+PRODUCT_PROPERTY_OVERRIDES += ro.config.system_vol_default=12
 #0~5 STREAM_VOICE_CALL
-PRODUCT_PROPERTY_OVERRIDES += ro.config.vc_call_vol_default=4
+PRODUCT_PROPERTY_OVERRIDES += ro.config.vc_call_vol_default=12
 #0~7 STREAM_ALARM
-PRODUCT_PROPERTY_OVERRIDES += ro.config.alarm_vol_default=6
+PRODUCT_PROPERTY_OVERRIDES += ro.config.alarm_vol_default=10
 #0~15 STREAM_MUSIC  
-PRODUCT_PROPERTY_OVERRIDES += ro.config.media_vol_default=12
+PRODUCT_PROPERTY_OVERRIDES += ro.config.media_vol_default=10
java 复制代码
--- a/frameworks/base/core/res/res/values/config.xml
+++ b/frameworks/base/core/res/res/values/config.xml
@@ -2168,13 +2168,13 @@
     <integer name="config_audio_notif_vol_steps">7</integer>
 
     <!-- The default volume for the notification stream -->
-    <integer name="config_audio_notif_vol_default">5</integer>
+    <integer name="config_audio_notif_vol_default">11</integer>
 
     <!-- The number of volume steps for the ring stream -->
     <integer name="config_audio_ring_vol_steps">7</integer>
 
     <!-- The default volume for the ring stream -->
-    <integer name="config_audio_ring_vol_default">5</integer>
+    <integer name="config_audio_ring_vol_default">11</integer>
 
     <!-- The default value for whether head tracking for

总结

尽管android版本不停地在迭代,但是大的框架没变,可以通过追溯代码找到可以修改的地方

每日赠言

空谈误国,实干兴邦

相关推荐
xiangpanf10 小时前
Laravel 10.x重磅升级:五大核心特性解析
android
robotx13 小时前
安卓线程相关
android
消失的旧时光-194314 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon15 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon15 小时前
VSYNC 信号完整流程2
android
dalancon15 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户693717500138416 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android16 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才17 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
阿明的小蝴蝶18 小时前
记一次Gradle环境的编译问题与解决
android·前端·gradle