• Andorid 13 修改默认音量区间、默认音量值


    Andorid 13 默认音量区间是 [0,15] ,默认音量 5。

    需求是:音量区间为 [0,100] ,默认音量 30 。

    找到对应产品的 device.mk ,添加如下

    #default volume
    PRODUCT_PROPERTY_OVERRIDES += \
       ro.config.media_vol_steps=100 \
       ro.config.media_vol_default=30
    
    • 1
    • 2
    • 3
    • 4

    意思是音量区间为 [0,100] ,默认音量 30 。

    这两个属性可以追溯到 frameworks/base/services/core/java/com/android/server/audio/AudioService.java

       /** Maximum volume index values for audio streams */
        protected static int[] MAX_STREAM_VOLUME = new int[] {
            5,  // STREAM_VOICE_CALL
            7,  // STREAM_SYSTEM
            7,  // STREAM_RING            // configured by config_audio_ring_vol_steps
            15, // STREAM_MUSIC
            7,  // STREAM_ALARM
            7,  // STREAM_NOTIFICATION    // configured by config_audio_notif_vol_steps
            15, // STREAM_BLUETOOTH_SCO
            7,  // STREAM_SYSTEM_ENFORCED
            15, // STREAM_DTMF
            15, // STREAM_TTS
            15, // STREAM_ACCESSIBILITY
            15  // STREAM_ASSISTANT
        };
    
        /** Minimum volume index values for audio streams */
        protected static int[] MIN_STREAM_VOLUME = new int[] {
            1,  // STREAM_VOICE_CALL
            0,  // STREAM_SYSTEM
            0,  // STREAM_RING
            0,  // STREAM_MUSIC
            1,  // STREAM_ALARM
            0,  // STREAM_NOTIFICATION
            0,  // STREAM_BLUETOOTH_SCO
            0,  // STREAM_SYSTEM_ENFORCED
            0,  // STREAM_DTMF
            0,  // STREAM_TTS
            1,  // STREAM_ACCESSIBILITY
            0   // STREAM_ASSISTANT
        };
    
    
        // ...
    
    
            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;
                }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    默认音量值定义在 frameworks/base/media/java/android/media/AudioSystem.java

        /** @hide */
        public static int[] DEFAULT_STREAM_VOLUME = new int[] {
            4,  // STREAM_VOICE_CALL
            7,  // STREAM_SYSTEM
            5,  // STREAM_RING           // configured in AudioService by config_audio_notif_vol_default
            5, // STREAM_MUSIC
            6,  // STREAM_ALARM
            5,  // STREAM_NOTIFICATION   // configured in AudioService by config_audio_ring_vol_default
            7,  // STREAM_BLUETOOTH_SCO
            7,  // STREAM_SYSTEM_ENFORCED
            5, // STREAM_DTMF
            5, // STREAM_TTS
            5, // STREAM_ACCESSIBILITY
            5, // STREAM_ASSISTANT
        };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    可以看到,

    • 最大音量是读取 ro.config.media_vol_steps 属性的值,未赋值就用 MAX_STREAM_VOLUME 数组里定义的,数组里的值按照声音通道区分。
    • 默认音量是读取 ro.config.media_vol_default 属性的值,未赋值就用 DEFAULT_STREAM_VOLUME 数组里定义的,数组里的值按照声音通道区分。
  • 相关阅读:
    .NET分布式Orleans - 2 - Grain的通信原理与定义
    FFMPEG 视频类过滤器学习整理
    .NET MAUI 安卓应用开发初体验
    598. 范围求和 II (脑筋急转弯)
    SpringCloud 分布式锁与分布式事务
    fabric.js的使用
    【附源码】计算机毕业设计JAVA砂石矿山管理系统
    Windows环境下Scala编程环境搭建
    seam carving---学习笔记
    VScode 官网下载太慢解决方法
  • 原文地址:https://blog.csdn.net/weixin_44021334/article/details/136436356