Android13修改多媒体默认音量

干就完了!

设置音量为最大音量,修改如下:

/framework/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
        -5, // STREAM_MUSIC
        +15, // STREAM_MUSIC
        6,  // STREAM_ALARM
        5,  // STREAM_NOTIFICATION
        7,  // STREAM_BLUETOOTH_SCO
        7,  // STREAM_SYSTEM_ENFORCED
        5, // STREAM_DTMF
        5, // STREAM_TTS
        5, // STREAM_ACCESSIBILITY
        5, // STREAM_ASSISTANT
    };

你一定会问,为啥是15而不是其他数字呢? good question  接下往下读

//framework/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
        15, // STREAM_MUSIC
        7,  // STREAM_ALARM
        7,  // STREAM_NOTIFICATION
        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
    };

 

这是系统枚举的最大最小值

修改默认值还有一个地方需要修改,在AudioService构造方法中

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] = MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC];
        } 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];
            }
        }

        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_MUSIC] = defaultMusicVolume;
+            AudioSystem.DEFAULT_STREAM_VOLUME[AudioSystem.STREAM_MUSIC] = MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC];
         } 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];
             }

Android不同的版本,存在的类可能不一致,但是思路是一致的

OVER~

### RK3326 平台 Android 9.0 音量调节 ADC 配置教程 在 RK3326 平台上实现 Android 9.0 的音量调节功能涉及多个层面的配置,包括硬件抽象层 (HAL) 和驱动程序的支持。以下是关于如何完成此任务的具体说明。 #### HAL 库支持 为了使音频设备能够正常工作,需要确保 HAL 层已经正确编译并部署到目标设备上。对于 RK3326 而言,其 HAL 文件路径可能类似于 `./out/target/product/rk3326/vendor/lib/hw/audio.primary.rk30board.so`[^1]。如果该文件不存在,则需重新构建项目以生成所需的 HAL 库。 将新生成的 HAL 库替换至设备中的对应位置: ```bash adb push audio.primary.rk30board.so /vendor/lib/hw/ ``` #### 设备树配置 音量调节通常依赖于特定的寄存器设置来控制模拟数字转换器 (ADC),这些设置可以通过修改设备树 (Device Tree, DTB) 来完成。具体操作如下: 1. 找到当前使用的设备树源码文件(通常是 `.dts` 文件)。例如,在 RK3326 上可能是 `rk3326-evb.dts`。 2. 添加或调整与 ES7210 或其他声卡芯片相关的节点定义。以下是一个示例片段: ```dts sound { compatible = "simple-audio-card"; simple-audio-card,name = "ES7210 Audio"; /* 定义输入输出端口 */ simple-audio-card,format = "i2s"; simple-audio-card,mclk-fs = <256>; /* 连接 CPU DAI 到 Codec */ simple-audio-card,cpu { sound-dai = <&i2s>; }; simple-audio-card,codec { sound-dai = <&es7210_codec>; // 声卡对应的 codec 名称 }; }; ``` 3. 编译更新后的设备树文件,并将其刷入设备中。 #### 驱动调试与错误排查 当遇到音量调节失败或其他问题时,可以按照以下方法进行排查: - **日志分析** 使用 ADB 工具捕获系统日志,重点关注音频子系统的消息输出: ```bash adb logcat | grep -i audio ``` 如果发现异常提示,比如找不到指定的 HAL 模块或者无法初始化某些资源,则表明可能存在未满足的依赖项。 - **权限验证** 确认应用程序具有访问麦克风和扬声器所需的所有必要权限。可以在应用清单文件 (`AndroidManifest.xml`) 中声明如下权限: ```xml <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> ``` - **参数校准** 对于基于 ADC 实现的功能来说,精确设定增益范围至关重要。通过实验确定最佳数值组合后写入固件代码里保存下来供后续调用即可。 --- ### 示例代码:动态改变媒体音量水平 下面给出一段用于演示如何编程方式更改全局音乐播放响度等级的例子: ```java import android.media.AudioManager; public class VolumeController { private AudioManager mAudioMgr; public void adjustVolume(int direction){ mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE); if(direction > 0){ mAudioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); } else{ mAudioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值