1、突然接到测试部一个需求 耳机录音在Android 12 直接运行崩溃,后面抓取日志一看是执行shell指令出现问题,看着日志我也没有特别清晰的思路
2、跳坑
于是我拿了之前另外一台Android 10的平板插上耳机然后跟踪了下logcat发现是正常的,耳机本来就是通过监听Intent.ACTION_HEADSET_PLUG系统广播
从硬件层面来看,直接监听耳机拔出事件不难,耳机的拔出和插入,会引起手机电平的变化,然后触发什么什么中断,对于有线耳机,顺着这个思路继续往下面查找原因。一开始以为驱动没有加节点信号,后面问驱动我们这边没有这个节点,然后尴尬的我,我看了下Android 10 设置耳机音量shell 指令
2.1 查看audio的全部信息(各音频流音量,焦点,策略等)
dumpsys audio
2.2 Android 10 设置音量并且显示音量UI
- //stream 3表示多媒体 名称 STREAM_MUSIC,15表示音量值 最大音量值
-
- media volume --show --stream 3 --set 15
2.3 音量调大调小
- --adj //表示调整 adjust --adj raise音量调高 --adj lower调低
- media volume --stream 3 --adj raise
- media volume --stream 0 --adj lower
- media volume --show --stream 3 --adj raise
- media volume --show --stream 0 --adj lower
2.4 获取当前音量
media volume --stream 3 --get
记录其范围和默认值,不同厂商设备的音频范围和默认值可能有所差别:
编号 | 名称 | 范围 | 默认值 | 功能 |
---|---|---|---|---|
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 | 语音助手 |
到这里我在想?难道Android 12变了?设置adb指令 于是我百度一番,这里大约等待一个多小时
3、踩坑
-
-
- adb shell service call audio 9 i32 <编号> i32 <类型> i32 1 1
adjustStreamVolume()方法所需要的音量操作<类型>
参数,可以在AudioManager.java中查看。整理如下:
值 | 名称 | 功能 |
1 | ADJUST_RAISE | 增加音量 |
-1 | ADJUST_LOWER | 降低音量 |
0 | ADJUST_SAME | 显示音量,但不设置 |
-100 | ADJUST_MUTE | 静音 |
100 | ADJUST_UNMUTE | 取消静音 |
101 | ADJUST_TOGGLE_MUTE | 切换静音状态 |
3.3.1 铃声编号2
,增加音量的类型为1
,其命令为:
adb shell service call audio 9 i32 2 i32 1 i32 1
3.3.2 音频编号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 #切换静音状态
3.3.3 语音助手编号11
,降低音量的类型为-1
,其命令为:
adb shell service call audio 9 i32 11 i32 -1 i32 1
3.3.4 闹钟编号4
,设置其音量为9
,其命令为:
adb shell service call audio 10 i32 4 i32 9 i32 1
3.3.5 Android 版本变动
从ASOP中搜索相关代码,依据对应版本的代码,更改命令中的参数。
如 Android 12,IAudioService.aidl相对 Android 11 改动了方法列表,adjustStreamVolume() 和 setStreamVolume() 分别从第 9 位、第 10 位,移动到了第 10位、第11位。
因此,Android 12 中:adb shell service call audio 10 i32 3 i32 1 # 调整设置耳机音量 问题解决
- 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 <编号> # 最大音量
4、总结
4.1 本次纯粹是Android10 跟Android 12串口音量指令变化 直接更新即可
4.2 学会对比分析问题 然后寻找差异去解决
4.3 想解决办法然后一步一步去验证
5、感谢
通过 adb 设置音量_Raurean的博客-CSDN博客_adb 静音
https://stackoverflow.com/questions/21055947/adb-command-to-set-volume