Android 蓝牙 Gatt 服务器/客户端同时连接的问题

Posted

技术标签:

【中文标题】Android 蓝牙 Gatt 服务器/客户端同时连接的问题【英文标题】:Issues with Android Bluetooth Gatt Server/Client Simultaneous Connection 【发布时间】:2016-06-01 19:43:31 【问题描述】:

我正在努力创建一个可以同时充当客户端和服务器以进行 gatt 连接的应用程序,但是每次在服务器充当客户端时运行服务器时,我都会收到未知状态和断开连接状态。

这是现在的过程:

1) 启动一部手机作为服务器(Phone1)

2) 启动另一部手机作为客户端(Phone2)

3) 将 Phone2 连接到 Phone1 并接收有关当前时间的通知更新。

4) 在 Phone2 上启动服务器 gatt 服务器,这就是我的蓝牙 gatt 回调的未知状态。首先它将 Phone2 与 Phone1 断开(断开 gatt 连接),然后 Phone2 的 BluetoothGattCallBack 的 onConnectionStateChange 返回断开状态和状态码 19。

我不确定是什么原因造成的,但两部手机都是相同的摩托罗拉 XT1526 API 级别 22。这可能是一个硬件问题,手机不能同时充当 gatt 服务器和客户端吗?我还尝试为同一手机的客户端和服务器使用一个蓝牙适配器对象,但也尝试使用两个单独的蓝牙适配器对象。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

根据蓝牙specification(Bluetooth Spec 4.2 Vol. 6 part B 4.5: Connection State)

"两个 LE 设备地址之间只能有一个连接。 发起者不应向已连接的广告商发送连接请求。 如果广告商从它已经连接的发起者那里收到连接请求,它应该忽略该请求。”

android 电话可能会通过断开连接来防止这种情况,因为我在这里遇到了同样的问题。

【讨论】:

“两个 LE 设备地址之间应该只有一个连接”我认为它不适用于同时作为服务器和客户端。它适用于尝试两次连接到单个设备。

以上是关于Android 蓝牙 Gatt 服务器/客户端同时连接的问题的主要内容,如果未能解决你的问题,请参考以下文章

是否可以同时在安卓手机中进行蓝牙 SPP 连接和 BLE GATT 连接?

在 Android 低功耗蓝牙上读取 GATT 属性的问题

Android 蓝牙 le gatt 特征通知问题

Android 应用程序可以发现本地 BLE GATT 服务器吗?

Android 4.0 中的蓝牙智能 (4.0) / GATT 支持?

Android - GATT Server 持续发布广告