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 <编号>
参考链接:
Android Code Search ADB Command to set volume?
|