ActiveDeviceManager文件的分析-一个蓝牙耳机的问题

Android 9.0引入的ActiveDeviceManager负责管理A2DP/HFP/AVRCP/HearingAid设备的连接状态。在系统中,当存在多个蓝牙耳机时,拔出有线耳机不会自动切换回蓝牙耳机,导致声音输出到外放。为解决此问题,通过注册耳机插拔广播,检测并判断连接的蓝牙耳机数量,只有一副时在拔出耳机后保持声音在蓝牙耳机。实现逻辑包括在AudioDeviceCallback回调中处理不同耳机数量情况,确保仅连接一个蓝牙耳机时,声音不会切换到外放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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系统上,按照上述方法,音乐的声音没有切换到蓝牙耳机,而是切换到外放了。
经过分析代码,以及该文件

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值