嵌入式 A2DP 接收器的蓝牙 LE 和经典共存。 Android 手机兼容性问题

问题描述 投票:0回答:1

我正在开发嵌入式音频产品。它被配置为 A2DP 接收器(经典蓝牙)。我们还使用 BLE GATT 服务作为我们配套应用程序的控制方法(带有网络蓝牙和本机应用程序的浏览器内)。

我们使用 NXP 的 iMXRT 系列 MCU,以及用于 RF 通信的 IW416 蓝牙/WiFi SOC。这种控制和音频的组合正在成功运行并通过互操作性测试(iOS、Windows、Linux、macOS 等...)。然而,Android 却引发了问题。我相信是由于以下行为:

  1. 我们必须将 BLE 宣传为命名的可连接服务。这使得应用程序控制能够独立于音频连接工作
  2. 我们必须保持 A2DP 服务可连接,以便音频可以独立于控制应用程序进行流传输
  3. 两个蓝牙连接(LE 和 Classic)的 MAC (BD_ADDR) 地址是相同的。这似乎是我们硬件的限制,但是我正在研究是否可以在 PHY 层设置不同的 MAC(或随机化 LE)。
  4. 在 Windows 上(例如),您可以在 BT 设置菜单中清楚地区分 LE 和 BT(音频)连接。借助扬声器徽标来识别 A2DP 连接。 iOS 似乎默认自动定位 A2DP...这适用于我们的实现。
  5. 故障案例:在 Android 设备上,BLE 和 BT Classic 连接被整合到一台设备中。它将始终采用 LE 设备的名称(如果经典和 LE 广告名称不同),并且当用户在蓝牙设置菜单中单击设备时,它将始终默认连接到 LE 控制。这意味着用户无法从 Android 设备连接音频。

以前有人遇到过这个问题吗?是否有解决此问题的标准做法?感觉我们有很多不幸和不兼容的约束,但我不认为这是一个太多独特的用例。我理解这种设计在蓝牙标准下应该是允许的(BLE 和 Classic 在同一目标设备上共存)。

我应该指出,使 BLE 广告匿名有助于允许 Android 音频连接...除了这会阻止用户使用我们的 webBLuetooth 控制机制识别设备(即连接上显示的唯一内容是 LE mac)。

备注:

  • 似乎很多制造商(例如索尼耳机)只是将 LE 服务禁用,直到连接 Classic Audio。我们的用户体验设计不允许这样做
  • 一种潜在的解决方法是随机化 LE 地址,同时保持静态经典 BD_ADDR。我正在调查我们的硬件是否支持此功能。
bluetooth bluetooth-lowenergy android-bluetooth
1个回答
0
投票

解决方案是随机化 BLE mac。在 Android 设置菜单中,设备现在显示为两个不同的连接,一个 A2DP 接收器和一个 BLE 控制。

© www.soinside.com 2019 - 2024. All rights reserved.