通过 adb 设置音量
1、adb 调用系统服务
Android 11 中调整音量:
adb shell service call audio 9 i32 <编号> i32 <类型> i32 1
Android 11 中设置音量:
adb shell service call audio 10 i32 <编号> i32 <音量> i32 1
通过service call audio调用系统服务,调用IAudioService.aidl中编号为9的音量调整方法adjustStreamVolume(),或编号为10的音量值设置方法setStreamVolume()。
2、命令参数
2.1 编号与音量
<编号>
可以在AudioSystem.java
文件中查看。
通过命令adb shell dumpsys audio
可以得到设备的其他音频属性。也可以通过以下命令查看:
adb shell service call audio 16 i32 <编号> # 查看当前音量
adb shell service call audio 17 i32 <编号> # 查看最小音量
adb shell service call audio 18 i32 <编号> # 查看最大音量
记录其范围和默认值可得到如下表格,不同厂商设备的音频范围和默认值可能有所差别:
编号 | 名称 | 范围 | 默认值 | 功能 |
---|---|---|---|---|
0 | STREAM_VOICE_CALL | 1~11 | 8 | 通话 |
1 | STREAM_SYSTEM | 0~15 | 10 | 铃声 |
2 | STREAM_RING | 0~15 | 10 | 铃声 |
3 | STREAM_MUSIC | 0~150 | 100 | 媒体 |
4 | STREAM_ALARM | 1~15 | 12 | 闹钟 |
5 | STREAM_NOTIFICATION | 0~15 | 10 | 闹钟 |
6 | STREAM_BLUETOOTH_SCO | 1~15 | 7 | 通话 |
7 | STREAM_SYSTEM_ENFORCED | 0~7 | 7 | 铃声 |
8 | STREAM_DTMF | 0~15 | 10 | 铃声 |
9 | STREAM_TTS | 0~15 | 10 | 铃声 |
10 | STREAM_ACCESSIBILITY | 0~15 | 10 | 媒体 |
11 | STREAM_ASSISTANT | 0~15 | 10 | 语音助手 |
2.2 操作类型
adjustStreamVolume()
方法所需要的音量操作 <类型>
参数,可以在AudioManager.java
中查看。整理如下:
值 | 名称 | 功能 |
---|---|---|
1 | ADJUST_RAISE | 增加音量 |
-1 | ADJUST_LOWER | 降低音量 |
0 | ADJUST_SAME | 显示音量,但不设置 |
-100 | ADJUST_MUTE | 静音 |
100 | ADJUST_UNMUTE | 取消静音 |
101 | ADJUST_TOGGLE_MUTE | 切换静音状态 |
3、示例
-
铃声编号
2
,增加音量的类型为1
,其命令为:adb shell service call audio 9 i32 2 i32 1 i32 1
-
音频编号
3
,设置其静音或非静音,其命令为:adb shell service call audio 9 i32 3 i32 -100 i32 1 #静音 adb shell service call audio 9 i32 3 i32 100 i32 1 #关闭静音 adb shell service call audio 9 i32 3 i32 101 i32 1 #切换静音状态
-
语音助手编号
11
,降低音量的类型为-1
,其命令为:adb shell service call audio 9 i32 11 i32 -1 i32 1
-
闹钟编号
4
,设置其音量为9
,其命令为:adb shell service call audio 10 i32 4 i32 9 i32 1
4、问题解决
4.1 权限问题
执行 adb root
。
4.2 Android 版本变动
从ASOP中搜索相关代码,依据对应版本的代码,更改命令中的参数。
如 Android 12,IAudioService.aidl 相对 Android 11 改动了方法列表,adjustStreamVolume() 和 setStreamVolume() 分别从第 9 位、第 10 位,移动到了第 10位、第11位。
因此,Android 12 中:
adb shell service call audio 10 i32 <编号> i32 <类型> i32 1 # 调整音量
adb shell service call audio 11 i32 <编号> i32 <音量> i32 1 # 设置音量
adb shell service call audio 17 i32 <编号> # 当前音量
adb shell service call audio 18 i32 <编号> # 最小音量
adb shell service call audio 19 i32 <编号> # 最大音量