在Android Studio中如何检测特定已连接蓝牙设备是否处于激活状态?
多已连接蓝牙设备的激活状态判断实现方案
核心场景:多台蓝牙设备已与发射端连接,需判断某指定蓝牙设备是否为当前激活的音频输出设备
状态差异:已连接 ≠ 已激活,未开启蓝牙双音频功能时,发射端所有音频仅会输出到激活状态的蓝牙设备
已有基础能力:可正常检测指定蓝牙设备是否处于已连接状态
Android 平台
- 调用系统
AudioManager的getDevices(AudioManager.GET_DEVICES_OUTPUTS)接口,拉取当前所有活跃音频输出设备列表 - 遍历返回的
AudioDeviceInfo数组,匹配目标蓝牙设备的MAC地址/设备名称 - 匹配成功即可判定目标设备处于激活状态
注意:Android 12及以上系统需提前申请BLUETOOTH_CONNECT权限,否则无法读取蓝牙设备属性
Windows 平台
- 基于MMDeviceAPI实现:调用
IMMDeviceEnumerator::GetDefaultAudioEndpoint接口获取当前默认音频输出设备 - 读取
IMMDevice的PKEY_DeviceInterface_FriendlyName或硬件ID属性,与目标蓝牙设备标识做匹配 - 匹配成功则判定为激活状态
注意:.NET开发可直接使用NAudio类库封装的对应方法,无需手动调用COM接口
iOS/macOS 平台
- iOS端使用
AVAudioSession的currentRoute.outputs属性获取当前输出端口列表 - macOS端使用
AVAudioEngine的outputNode的输入格式对应的端口信息 - 匹配端口类型为
bluetoothA2DP/bluetoothLE且设备标识与目标一致的项,存在即判定为激活
注意:iOS端需申请音频相关权限,否则无法读取音频路由信息
蓝牙双音频场景兼容
如果系统开启了蓝牙双音频功能,可直接遍历所有活跃的音频输出端口,只要目标蓝牙设备出现在活跃列表中,即可判定为激活状态,不受单音频输出逻辑限制。
内容的提问来源于stack exchange,提问作者Sumi Katakam
相关产品推荐
相关产品推荐

