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 应用程序可以发现本地 BLE GATT 服务器吗?