Android系统在行业应用中的使用越来越广泛,一般的机器都会带有hdmi的功能;但是调节hdmi音量的时候会出现无法调节的情况,要么没有声音,要么声音直接最大,无法呈现梯度变化。原因是hdmi设备的音量被固定住了,可以看如下代码:

        public void checkFixedVolumeDevices() {synchronized (VolumeStreamState.class) {// ignore settings for fixed volume devices: volume should always be at max or 0if (mStreamVolumeAlias[mStreamType] == AudioSystem.STREAM_MUSIC) {for (int i = 0; i < mIndexMap.size(); i++) {                                                                                  int device = mIndexMap.keyAt(i);   int index = mIndexMap.valueAt(i);  if (((device & mFullVolumeDevices) != 0)   || (((device & mFixedVolumeDevices) != 0) && index != 0)) {mIndexMap.put(device, mIndexMax);}applyDeviceVolume_syncVSS(device);}}}}

这个函数的作用是检查设备是否需要音量固定,这里面比较关键的变量是mFixedVolumeDevices,它的初始化如下:

    int mFixedVolumeDevices = AudioSystem.DEVICE_OUT_HDMI |                                                                                       AudioSystem.DEVICE_OUT_DGTL_DOCK_HEADSET |AudioSystem.DEVICE_OUT_ANLG_DOCK_HEADSET |AudioSystem.DEVICE_OUT_HDMI_ARC |  AudioSystem.DEVICE_OUT_SPDIF | AudioSystem.DEVICE_OUT_AUX_LINE; 

其中DEVICE_OUT_HDMI对应的就是hdmi设备,可见google在设计音频策略的时候默认是将hdmi的音量给固定住了,因此我们无法通过音量键去调节hdmi设备的音量。

通过以上代码的分析可以知道,要想恢复hmdi音量的调节,必须将DEVICE_OUT_HDMI从mFixedVolumeDevices去掉

mFixedVolumeDevices &= ~AudioSystem.DEVICE_OUT_HDMI

在AudioService的构造函数中或者根据具体需求在对应的地方加上这一行代码,可以解决hdmi音量调节问题。

代码位置 ./services/core/java/com/android/server/audio/AudioService.java

Android系统HMDI音量无法梯度调节,只能0或者max相关推荐

  1. Android系统的音量控制

    Android系统的音量控制 效果图: GitHub GitHub(源码):https://github.com/kongqw/VolumeController 方法 获取AudioManager m ...

  2. android系统各种音量的获取与设置

    获取系统音量 通过程序获取android系统手机的铃声和音量.同样,设置铃声和音量的方法也很简单! 设置音量的方法也很简单,AudioManager提供了方法: publicvoidsetStream ...

  3. Android 系统(269)---native保活5.0以上方案推演过程以及代码详述

    Android 进程常驻(4)----native保活5.0以上方案推演过程以及代码详述 这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取 ...

  4. Android 系统(268)---native保活5.0以下方案推演过程以及代码详述

    Android 进程常驻(3)----native保活5.0以下方案推演过程以及代码详述 这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取 ...

  5. Android系统学习(一)------编译系统Android7.0

    你好!这里是风筝的博客, 欢迎和我一起交流. 最近入手了一块nanopi m4,这块板子的芯片是rk3399,而且板子开放有源码,正好拿来学习安卓系统! 板子wiki:http://wiki.frie ...

  6. 国产android系统,最干净的国产安卓7.0系统,体验还不错

    标签:安卓系统(23)安卓(183) 在前几年,国内曾一度掀起UI风,各大厂商都推出自己的UI,有些即使没有自己手机产品,也依旧推出自己的UI,但是好景不长,到如今大多数都销声匿迹.现在,国内仅剩下F ...

  7. 华为android系统耗电高,华为P20升级EMUI9.0耗电快?带你一招解决!

    原标题:华为P20升级EMUI9.0耗电快?带你一招解决! *本文来自花粉俱乐部论坛-在死海游泳的咸鱼 华为P20升级EMUI 9.0后耗电快,手机升级后电量不经用,怎么办?不少朋友在升级Androi ...

  8. 审美的变迁 回顾Android 系统进化史

    1十款甜点诠释Android进化史    "为什么这么多年来我还是喜欢当初的那个TA,但那些做UI的设计师却在不停地变换着审美标准?",当笔者把手中的Google Nexus 5升 ...

  9. Android系统音量调节策略学习总结

    二.外设类型 USB音箱底座 蓝牙音箱 3.5mm线控耳机 三.相关术语 track volume: 单个App设置音量时设置的是这个,它只影响本App的音量. stream volume: 设置某一 ...

最新文章

  1. 视觉实战|使用人工神经网络进行图像分类
  2. check_traffic.sh监控格式为Hex-STRING的解决办法
  3. mysql命令行卡在>>>>>
  4. python做硬件自动化测试-用python做自动化测试--Python实现远程性能监控
  5. “两小学生研究喝茶抗癌获奖”,官方回应:经老师培训独立完成
  6. 3D 旋转相册 立方体的盒子 相册(源码分享)
  7. [书目20110904]谢孟媛英文文法
  8. JAVA爬取淘宝、京东、天猫以及苏宁商品历史价格(二)
  9. 带小数的二进制转十进制(C代码)
  10. 【机器学习实战笔记】Logistic回归
  11. 一图带你了解全球疫情爆发背后的隐藏机会
  12. C语言动态开辟数组(一维与二维)【malloc() free()】
  13. 学成在线项目(HTML+CSS)
  14. Android组件间数据传递
  15. 计算机初级操作员试题汇编,计算机初级操作员试卷.doc
  16. 51cto的请看过来
  17. Spring单例Bean与单例模式的区别
  18. Linux-i386,x86_64啥区别
  19. LInux 开机启动之MBR引导
  20. 计算机信息安全电子支付论文,关于计算机信息安全问题的研究论文原稿

热门文章

  1. python 安装CV2
  2. 悲观锁与乐观锁的区别 和 Redis中的watch
  3. Latex如何插入多个图片,实现并排排列或者多行多列排列
  4. 【SQL自学打卡|DAY13】——组合查询
  5. 清空数据库所有表数据
  6. 500错误及服务器内部错误
  7. 群晖NAS误删30T数据成功恢复全过程
  8. [vdbench]vdbench典型配置
  9. 软件开发实训(720科技)――产品经理能力模型
  10. 微信小程序—点击实现页面跳转