断开和关闭 BLE 连接会停止经典的蓝牙 PBAP 配置文件

Disconnecting and closing BLE connection stops classic Blutetooth PBAP profile

我有一个包含两个 Android 设备的设置:一个 android phone 和一个自定义硬件 运行 Android 10. 后者充当BLE 服务器,始终可以使用相同的静态 MAC 地址被发现。此外,当该自定义硬件与 phone 配对时,它可以访问 phone 的联系人和通话记录。该硬件还可以播放从 phone.

流式传输的媒体(声音)

我使用 RxAndroidBle 1.11.0 库进行 BLE 通信。一旦我通过 BLE Characteristic 交换了一些数据,我就取消了对 RX observable 的订阅,因此库有效地调用了:bluetoothGatt.disconnect() 然后 blutetoohGatt.close() (所有 DisconnectOperation class 内的人)。

我的问题是,根据我的观察,调用 blutetoohGatt.disconnect() 也会断开 classic BT 配置文件 (PBAP)。

这是预期的行为吗?

我研究了通用 Android P 框架的代码,看起来调用 bluetoothGatt.disconnect() -> bluetoothGatt.close() 完全断开了给定 MAC 地址所描述的设备: BluteoothGatt#disconnect() BlutetoothGatt#close() BlutetoothGatt#unregisterApp()

我会冒险声明我有一个非常不寻常的 BLE 用例场景,其中 phone (Central/Client) 和外围设备(自定义 Android HW/Server)通过经典 BT 配置文件和 BLE 同时连接。 我怀疑 disconnecting/closing 设备使用其 BT MAC 地址断开了两个配置文件,因此联系人共享停止工作。 是否可以只断开BLE连接,而不影响两个设备之间的classic BT(SPP/PBAP)连接?

that Github issue 中描述的进一步调查后 我意识到我的自定义硬件配备了 dual-mode BT 适配器,因此它支持经典 BT (BR/EDR) 和 BLE。 只要我通过系统设置将 Android phone 与自定义硬件配对,就会绑定经典的 BT 配置文件,而且我的 GATT 服务器也会使用相同的 MAC 地址来宣传相关服务由 BR/EDR。断开 BLE 客户端连接也断开 BD/EDR。

对我来说有帮助的是不通过系统设置开始配对,而是让 GATT 服务器做广告并让我的 BLE 客户端应用程序先连接(并触发配对)。结果,我与“AA:AA:AA:AA:xx”下可用的服务器建立了 BLE 连接,而经典 BT 配置文件连接到自定义硬件上的“BB:BB:BB:BB:yy”接口。 现在,断开 BLE 配置文件不会断开经典配置文件。

我正在寻找一种解决方案,它可以让我的 GATT 服务器仅通过 BLE 进行广告宣传,但到目前为止还没有成功。 以下是我发现的一些有趣的链接:

connectGatt creates connection over BT Classic instead of BLE

BLE Dual-Mode