Android音频输出切换
来源:互联网 发布:php培训课程安排 编辑:程序博客网 时间:2024/05/21 10:11
扬声器输出和耳机输出是音频系统最基本的音频输出通路,实际应用中用户可根据自己需要随意切换,具体表现是通过插入耳机选择耳机输出,拔出耳机选择默认的扬声器输出。
图5-13 耳机插拔检测
如图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音频输出切换
- Android如何实现音频输出切换
- 【Android】Audio音频输出通道切换
- 【Android】Audio音频输出通道切换
- Audio音频输出通道切换
- 112.AVAudioSession音频会话(类别选择/音频输出切换)
- Android Audio 音频输出设备切换
- Android Audio 音频输出设备切换
- Android 音频输出方式监听
- android 5.1 系统音频的切换
- Android 音频 Framework层 音频输出 Java API
- Android jni层直接输出音频示例
- Android---处理音频输出的硬件
- Android Developers:处理音频输出的硬件
- Android---处理音频输出的硬件
- android控制webview音频播放 本地/web播放源切换
- 简单聊一下Android音频通路的切换
- Android java层音频相关的分析与理解(五)音频通路的切换
- 文档示例
- 改变 DrawText()字体
- 产品经理必读的九步法
- QPropertyAnimation 的用法
- Oracle EBS 11i 职责不见了的解决方法
- Android音频输出切换
- 三种经典“返回顶部”效果的代码
- IIS7 “未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序”
- 四元数
- Linux 下当前可执行文件如何获取自身文件名与全路径<转>
- 控制程序流
- 有两个变量a,b,不使用任何中间变量交换它们
- DELPHI获取网卡MAC地址 转
- Hadoop 0.20.205.0 + zookeeper + hbase安装历程