扬声器输出和耳机输出是音频系统最基本的音频输出通路,实际应用中用户可根据自己需要随意切换,具体表现是通过插入耳机选择耳机输出,拔出耳机选择默认的扬声器输出。

如图5-13所示,扬声器与耳机输出切换的实现思路是内核底层驱动实现耳机插拔检测,然后通过uevent通信机制通知Java框架层,Java框架层通过Intent机制发送广播消息通知音频系统改变输出通道。下面介绍下具体实现方法[19]

首先调用class_create函数创建一个switch类,然后调用device_create函数创建一个switch类从属设备h2w,再通过调用device_create_file函数创建h2w设备的名称和状态两个属性文件,于是在文件系统中便有了供用户空间访问的两个节点“/sys/class/switch/h2w/name”和“/sys/class/switch/h2w/state”。一个专用中断脚用于耳机插拔检测,当耳机插入或拔出时触发中断,更新h2w状态的变化并调用kobject_uevent_env函数发送一组字符串给Java框架层。Java框架层中启动UEventThread线程用于轮询并接收内核发上来的uevent数据。WiredAccessoryObserver继承了UEventObserver,在系统启动完成时便调用startObserving()启动监听h2w的状态变化,当内核发送上来的字符串匹配成功后执行onUEvent()进行处理,onUEvent()最终会利用Intent机制发送广播消息ACTION_HEADSET_PLUG。AudioService创建AudioServiceBroadcastReceiver实例并通过IntentFilter注册监听ACTION_HEADSET_PLUG,当接收到ACTION_HEADSET_PLUG后调用AudioSystem.setDeviceConnectionState()设置音频设备连接状态,AudioSystem.setDeviceConnectionState()最终将调用到Audio硬件抽象层的AudioPolicyManager,通过音频策略模块改变音频输出通道,从而实现扬声器与耳机输出切换。

Android Audio 音频输出设备切换相关推荐

  1. 【Android】Audio音频输出通道切换 - 蓝牙bluetooth、外放

    参考: [Android]Audio音频输出通道切换 - 蓝牙.外放 Android Audio 音频输出通道切换 为什么 iOS 或 Android 设备连接蓝牙设备后不能通过蓝牙设备接电话? xq ...

  2. android音频系统(7):通话过程中的音频输出设备切换

    前言:由于通话比较特殊,Android对于通话过程中音频输出设备的切换做了特殊处理,它在上层也是通过切换音频播放状态来完成切换操作的,android用CallAudioState来封装通话过程中的音频 ...

  3. 【Android】Audio音频输出通道切换 - 蓝牙、外放

    手机音频的输出有外放(Speaker).听筒(Telephone Receiver).有线耳机(WiredHeadset).蓝牙音箱(Bluetooth A2DP)等输出设备.在平时,电话免提.插拔耳 ...

  4. <一>Android Audio音频框架

    目录 1.0 设备驱动 2.0  android hal层 3.0  选择设备的暗箱策略AudioPolicy 4.0  软件层面的混音,AudioFlinger 5.0 完整的对外接口 AudioS ...

  5. Android Audio打开输出设备流程(十五)

    android audio 生产者与消费者 简介 全面接触生产者/消费者问题是在操作系统原理中,并发性原理讨论的问题 生产者/消费者问题.最近的工作偏向音频,接着上一篇文章,用生产者,消费者模型来理解 ...

  6. Android Audio音频通路(七)

    android audio 生产者与消费者 简介 全面接触生产者/消费者问题是在操作系统原理中,并发性原理讨论的问题 生产者/消费者问题.最近的工作偏向音频,接着上一篇文章,用生产者,消费者模型来理解 ...

  7. Android Audio 音频路由

    一.在 AudioPolicyService 中,选择音频路由时会从当前音频流的类型获取音频的路由策略: /frameworks/av/services/audiopolicy/managerdefa ...

  8. Android audio音频流数据异常问题分析

    一.背景 在 Android 系统的开发过程当中,音频异常问题通常有如下几类,无声,调节不了声音,爆音,声音卡顿,声音效果异常(忽大忽小,低音缺失等)等.尤其声音效果这部分问题通常从日志上信息量较少, ...

  9. Android Audio - 支持多个APK同时录音

    Android Audio - 支持多个APK同时录音 原理说明 Android4.4 修改方法 Android5.1 & 6.0 修改方法 Android8.1 修改方法 Android9. ...

最新文章

  1. Swing布局管理器介绍
  2. 从Android界面开发谈起(转)
  3. 《游戏引擎架构》笔记十四
  4. 如何捕获和分析 JavaScript Error
  5. sql with as 用法
  6. 在 SUSE 11 sp2 上安装 freeradius
  7. 访问Access数据库需要注意的问题
  8. java过滤器api_springboot集成过滤器
  9. matlab哈宁低通,Matlab实现电网谐波测量加窗插值算法.pdf
  10. yy主播旁边的机器人_YY上三位“聪明”主播,伽柏垄断主播设备,其余两位成为老板...
  11. java初级程序员必备的算法和数据结构入门只是,编程界的敲门砖,算法合集,简单详细
  12. 使用linux提交pbs任务:运行matlab或perl程序
  13. php如何解析QQ音乐,QQ音乐解析接口分享
  14. python123练习六+练习七
  15. 概率论与数理统计手写笔记
  16. pb导入excel文件
  17. win10易升_小科普 | 彻底关闭Win10自动更新
  18. JAVA实现手机短信验证码在指定有效的时间里校验
  19. 基于Tushare的上证综指行情分析与影响其涨跌的因素(以美债为例)
  20. ODM 对象文档映射

热门文章

  1. 需求挖掘的十三种方法
  2. ElementUI 整体页面布局
  3. 游戏设计模式-原型模式
  4. 大类资产配置的基本方法
  5. ak sk认证java demo_AK-SK鉴权
  6. 基于PCA 人脸识别/人脸识别算法/人脸检测程序源码MATLAB ELM+PCA人脸识别 PCA人脸识别matlab代码 基于PCA算法的人脸识别
  7. C语言实现一维信号小波阙值去噪
  8. 学习C语言需要学oracle,什么是C语言? 为什么要学习C语言?
  9. Android开发和安全系列工具
  10. 工作安排(反悔贪心板子题)