我有两个Android设备的设置:一个是Android手机,另一个是运行Android 10的自定义硬件。后者充当BLE服务器,它总是可以使用相同的静态MAC地址来发现。此外,当该自定义硬件与手机配对时,它可以访问手机的联系人和通话历史记录。该硬件还可以播放来自手机的流媒体(声音(。
我使用RxAndroidBle 1.11.0库进行BLE通信。一旦我通过BLE Characteristic交换了一些数据,我就会取消订阅RX observable,因此库有效地调用:bluetoothGatt.disconnect()
然后blutetoohGatt.close()
(所有在DisconnectOperation
类内的(。
我的问题是,根据我的观察,调用blutetoohGatt.disconnect()
也会断开经典的BT配置文件(PBAP(。
这是一种预期行为吗?
我已经研究了通用Android p框架的代码,看起来调用bluetoothGatt.disconnect() -> bluetoothGatt.close()
完全断开了给定MAC地址所描述的设备:BluteoothGatt#disconnect()
BlutetoothGatt#close()
BlutetoothGatt#unregisterApp()
我冒着声明的风险,我有一个非常不寻常的BLE用例场景,即手机(中央/客户端(和外围设备(自定义安卓硬件/服务器(通过经典BT配置文件和BLE同时连接。我怀疑使用BT MAC地址断开/关闭设备会断开两个配置文件,因此联系人共享停止工作。是否可以仅断开BLE连接,而不影响两个设备之间的经典BT(SPP/PBAP(连接?
在对Github问题进行进一步调查后我意识到我的定制硬件配备了双模BT适配器,因此它支持经典BT(BR/EDR(和BLE。一旦我通过系统设置将安卓手机与自定义硬件配对,经典的BT配置文件就会被绑定,但我的GATT服务器也会使用BR/EDR使用的相同MAC地址来宣传相关服务。断开BLE客户端连接也断开BD/EDR。
在我的情况下,帮助我的是不要通过系统设置开始配对,而是让GATT服务器发布广告,让我的BLE客户端应用程序首先连接(并触发配对(。结果,我有一个与服务器的BLE连接,该服务器在";AA:AA:AA:xx";,而经典BT简档连接到"BT";BB:BB:BB:BB:yy";自定义硬件上的接口。现在,断开BLE配置文件不会断开经典配置文件
我正在寻找一个解决方案,允许我的GATT服务器只用BLE做广告,但到目前为止没有运气。以下是我发现的一些有趣的链接:
connectGatt通过BT Classic而不是BLE 创建连接
如何强制BLE";只是工作";Android 中的配对
BLE双模