android9.0系统中增加了ActiveDeviceManager文件,该文件负责跟踪连接的A2DP / HFP / AVRCP / HearingAid设备,并选择哪个设备处于活动状态(对于每个配置文件)。
在该文件中注册了以下这些广播:
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);
filter.addAction(BluetoothA2dp.ACTION_ACTIVE_DEVICE_CHANGED);
filter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
filter.addAction(BluetoothHeadset.ACTION_ACTIVE_DEVICE_CHANGED);
filter.addAction(BluetoothHearingAid.ACTION_ACTIVE_DEVICE_CHANGED);
对于蓝牙的打开,A2DP连接状态的变化,HFP连接状态的变化等广播做了注册。
在该文件中继承了AudioDeviceCallback类,这个方法定义了应用程序可以接收音频设备连接和断开连接事件通知的机制,并重载了AudioDeviceCallback类的
onAudioDevicesAdded和onAudioDevicesRemoved方法。当设备连接或者断开时,两个方法会被调用到。
在9.0系统的蓝牙测试中,我们遇到了一些问题. 9.0之前的蓝牙只允许连接一个蓝牙耳机, 在之前的系统中,如果用户执行下面操作:
1 打开蓝牙,配对一个支持A2DP的蓝牙耳机.
2 打开音乐播放器,播放一首音乐.
3 插入有线耳机,声音切到有线耳机。
4 拨出有线耳机,音乐切换到蓝牙耳机。
但是在9.0系统上,按照上述方法,音乐的声音没有切换到蓝牙耳机,而是切换到外放了。
经过分析代码,以及该文件