这一节以有线音频外设为例,探讨了从WiredAccessoryObserver收到UEvent开始到AudioService通知底层应用为止的AudioService对音频外设的管理机制。
总结一下音频外设拔插的处理过程:
由负责相关外设的模块监听从硬件上报的状态通知。将状态变化提交给AudioService进行处理。
AudioService得到相关模块发来的通知,根据需要发送BECOMING_NOISY消息给应用,并更新自己的可用设备列表。
AudioService将外设可用状态的变化通知AudioPolicy。AudioPolicy更新自己的可用设备列表,并重新选取音频输出设备。
AudioService将外设可用状态以广播的形式发送给应用等其他对此感兴趣的应用程序或系统模块。
蓝牙模块负责蓝牙耳机的连接/断开状态的监控并通知AudioService。AudioService收到此通知之后的代码路径虽然与本节所讨论的内容不完全一样,但其处理原则与有线耳机是一致的,读者可以自行分析学习。