当前位置: 首页 > news >正文

Android Framework 之 AudioDeviceBroker

一、核心定位与架构位置
  1. 路径
    base/services/core/java/com/android/server/audio/AudioDeviceBroker.java

  2. 层级关系

    AudioService
    AudioDeviceBroker
    AudioSystemAdapter
    AudioDeviceInventory
    AudioSystem JNI
    • 上承:AudioService(音频总控服务)
    • 下接:AudioSystemAdapter(音频系统操作代理)
二、核心职责与功能
  1. 音频设备生命周期管理

    • 动态感知:监控设备插拔事件(耳机、USB声卡、蓝牙等)
    • 状态维护:通过 mDeviceList 实时记录设备连接状态
    • 路由决策:基于优先级自动切换输出设备(如耳机插入时从扬声器切到耳机)
  2. 跨设备协调

    方法作用场景
    setWiredDeviceConnectionState()处理有线设备(耳机/USB)连接事件
    setBluetoothA2dpDeviceConnectionState()A2DP蓝牙音乐设备状态同步
    setBluetoothHfpDeviceConnectionState()蓝牙通话设备状态同步
  3. 策略强制执行

    • setForceUse():强制指定音频使用路径(如通话强制走扬声器)
    • 示例场景:车载模式下导航音强制从汽车音响输出
  4. 全局状态协调

    • 维护三大核心数据集:
      • mDeviceList:当前活跃设备列表
      • mRoutes:音频路由策略配置
      • mAudioPolicies:系统级音频策略规则
三、关键协作组件
  1. AudioSystemAdapter

    • 功能代理:封装对底层音频系统的原子操作
      // 示例:设置音量
      audioSystemAdapter.setStreamVolume(STREAM_MUSIC, volume, flags);
      
    • 操作范围
      • 音量/静音控制
      • 音频均衡器调节
      • 输入/输出设备切换
  2. AudioDeviceInventory

    • 设备清单管理
      List<AudioDeviceInfo> devices = audioDeviceInventory.getDevices(); 
      
    • 功能
      • 枚举当前输入/输出设备
      • 校验设备兼容性(如采样率支持)
      • 处理设备热插拔事件队列
http://www.dtcms.com/a/239572.html

相关文章:

  • 【论文阅读】大模型优化器(Large Language Models As Optimizers)
  • 全面掌握Pandas时间序列处理:从基础到实战
  • UE5 学习系列(二)用户操作界面及介绍
  • Vue 模板语句的数据来源
  • MybatisPlus枚举类的应用与转换
  • 六、接口关联
  • 【Kubernetes】Ingress-nginx快速入门
  • “概率鹦鹉”难解语义等价验证的NPC难题: 从技术本质看LLM在SQL优化任务中的致命缺陷
  • 【Java多线程从青铜到王者】单例设计模式(八)
  • TMC2226超静音步进电机驱动控制模块
  • ConcurrentModificationException 并发修改异常详解
  • 深度学习-1.神经网络理解
  • 博图 SCL 编程技巧:灵活实现上升沿与下降沿检测案例分享(下)
  • LangChain4j(18)——通过Xinference调用Rerank模型
  • 【前端实战】如何让用户回到上次阅读的位置?
  • 【C++】IO库 IO流
  • 禁用思科锐捷设备分页功能
  • redis--黑马点评--Redisson快速入门
  • pytorch卷积层权重之 二维互相关运算(corr2d) (亲测,已解决)
  • 神经网络学习-神经网络简介【Transformer、pytorch、Attention介绍与区别】
  • pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
  • 网页后端开发(基础1--maven)
  • 初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)
  • 如何在 PyTorch 中自定义卷积核参数(亲测,已解决)
  • [免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 设计模式-抽象工厂模式
  • C/Python/Go示例 | Socket Programing与RPC
  • 云原生时代的系统设计:架构转型的战略支点
  • GO语言---init函数
  • Go 语言底层(四) : 深入 Context 上下文