在Android手机上编程音频输出设备通常涉及以下几个步骤:
创建音频设备节点
使用`class_create`函数创建一个switch类。
使用`device_create`函数创建一个switch类从属设备(例如h2w)。
通过`device_create_file`函数创建h2w设备的名称和状态两个属性文件,这样在文件系统中就形成了供用户空间访问的两个节点:“/sys/class/switch/h2w/name”和“/sys/class/switch/h2w/state”。
监听设备状态变化
实现一个专有的观察者(例如`artObserving()`)来启动监听h2w的状态变化。
当内核发送上来的字符串匹配成功后,执行`onUEvent()`进行处理。
`onUEvent()`最终会利用Intent机制发送广播消息`ACTION_HEADSET_PLUG`。
处理广播消息
创建一个`AudioServiceBroadcastReceiver`实例并通过`IntentFilter`注册监听`ACTION_HEADSET_PLUG`。
当接收到`ACTION_HEADSET_PLUG`后,调用`AudioSystem.setDeviceConnectionState()`方法设置音频设备连接状态。
`AudioSystem.setDeviceConnectionState()`最终将调用到音频硬件抽象层的`AudioPolicyManager`,通过音频策略模块改变音频输出通道,从而实现扬声器与耳机输出切换。
示例代码