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版本不停地在迭代,但是大的框架没变,可以通过追溯代码找到可以修改的地方

每日赠言

空谈误国,实干兴邦

相关推荐
xq952719 小时前
Andorid Google 登录接入文档
android
黄林晴20 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android
_小马快跑_2 天前
Kotlin | 从SparseArray、ArrayMap的set操作符看类型检查的不同
android
_小马快跑_2 天前
Android | 为什么有了ArrayMap还要再设计SparseArray?
android