• Android 12 adb 串口指令设置耳机音量适配


    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

    1. //stream 3表示多媒体 名称 STREAM_MUSIC,15表示音量值 最大音量值
    2. media volume --show --stream 3 --set 15

    2.3 音量调大调小

    1. --adj //表示调整 adjust --adj raise音量调高 --adj lower调低
    2. media volume --stream 3 --adj raise
    3. media volume --stream 0 --adj lower
    4. media volume --show --stream 3 --adj raise
    5. media volume --show --stream 0 --adj lower

    2.4 获取当前音量

    media volume --stream 3 --get

    记录其范围和默认值,不同厂商设备的音频范围和默认值可能有所差别:

    编号名称范围默认值功能
    0STREAM_VOICE_CALL1~118通话
    1STREAM_SYSTEM0~1510铃声
    2STREAM_RING0~1510铃声
    3STREAM_MUSIC0~150100媒体
    4STREAM_ALARM1~1512闹钟
    5STREAM_NOTIFICATION0~1510闹钟
    6STREAM_BLUETOOTH_SCO1~157通话
    7STREAM_SYSTEM_ENFORCED0~77铃声
    8STREAM_DTMF0~1510铃声
    9STREAM_TTS0~1510媒体
    10STREAM_ACCESSIBILITY0~1510媒体
    11STREAM_ASSISTANT0~1510语音助手

    到这里我在想?难道Android 12变了?设置adb指令 于是我百度一番,这里大约等待一个多小时

    3、踩坑

    3.1. adb 调用系统服务
    Android 12 中调整音量:

    1. adb shell service call audio 9 i32 <编号> i32 <类型> i32 1 1

    3.2 操作类型

    adjustStreamVolume()方法所需要的音量操作<类型>参数,可以在AudioManager.java中查看。整理如下:

    名称功能
    1ADJUST_RAISE增加音量
    -1ADJUST_LOWER降低音量
    0ADJUST_SAME显示音量,但不设置
    -100ADJUST_MUTE静音
    100ADJUST_UNMUTE取消静音
    101ADJUST_TOGGLE_MUTE切换静音状态

    3.3 示例

     3.3.1 铃声编号2,增加音量的类型为1,其命令为:

    adb shell service call audio 9 i32 2 i32 1 i32 1

       3.3.2 音频编号3,设置其静音或非静音,其命令为:

    1. adb shell service call audio 9 i32 3 i32 -100 i32 1 #静音
    2. adb shell service call audio 9 i32 3 i32 100 i32 1 #关闭静音
    3. 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    # 调整设置耳机音量 问题解决

    1. adb shell service call audio 10 i32 <编号> i32 <类型> i32 1 # 调整音量
    2. adb shell service call audio 11 i32 <编号> i32 <音量> i32 1 # 设置音量
    3. adb shell service call audio 17 i32 <编号> # 当前音量
    4. adb shell service call audio 18 i32 <编号> # 最小音量
    5. 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

  • 相关阅读:
    详解 Intersection Observer API ( 交叉观察器 )
    分组聚合不再难:Pandas groupby使用指南
    解决dockerfile创建镜像时pip install报错的bug
    ModbusTCP 转 Profinet 主站网关在博图配置案例
    【Linux】防火墙 iptables
    WebP 相对于 PNG、JPG 有什么优势?
    IDEA中取消双击shift全局搜索
    git分支开发管理实践
    99. 激光炸弹(二维前缀和)
    纷享销客2022新增长系列之《高科技行业橙皮书》重磅发布
  • 原文地址:https://blog.csdn.net/qq_15950325/article/details/126206476