【发布时间】:2015-08-18 11:19:18
【问题描述】:
我正在开发一个需要自动连接到 ble 外围设备的应用程序。
我有一个粘性服务,它执行以下操作:
- 在绑定的设备中查找所需的设备
- 如果设备没有正常工作(第一次),扫描它并使用
device.createBond()绑定到它,通过收听 ACTION_BOND_STATE_CHANGED 广播等待绑定完成 - 使用
device.connectGatt(ctx,true,callback)连接到它 - 等待带有连接状态的
onConnectionStateChange回调 - 使用
gatt.discoverServices()启动服务发现 - 等待
onServicesDiscoverd回调 - 通过使用
gatt.writeDescriptor编写描述符来启用有关特征的通知 - 等待 onDescriptorWrite 回调成功状态
BluetoothGatt.GATT_SUCCESS (0) - 处理收到的通知
这一切都是第一次正常工作。当设备断开连接(例如超出范围或关闭)时,粘性服务回调 gatt.disconnect() 和 gatt.close(),重新启动并再次执行所有操作,这次它使用绑定的设备进行连接。
在第 7 步之前一切正常,这意味着我收到一个状态为 133 的onDescriptorWrite 的回调,有时后跟一个状态为 0 和状态为 22 的连接状态更改回调。
我在网上找不到任何关于状态 133 或 22 的含义的信息。
知道为什么会这样吗?
我现在正在解决这个问题,通过移除绑定(反射)来对错误的onDescriptorWrite 回调做出反应,然后使用新扫描的设备再次执行所有操作。
所以基本上我使用绑定只是为了等待设备连接,然后重新启动整个过程。
这意味着绑定设备的 gatt 连接对于编写我需要的描述符是无用的。
感觉好像我错过了什么,很想知道什么。
编辑: 一些相关的 logcat 输出
08-18 16:06:31.363 12765-12835/? W/bt-att﹕ gatt_rsp_timeout disconnecting...
08-18 16:06:31.363 12765-12835/? W/bt-btif﹕ bta_gattc_conn_cback() - cif=3 connected=0 conn_id=3 reason=0x0016
08-18 16:06:31.363 12765-12835/? W/bt-btif﹕ bta_gattc_conn_cback() - cif=4 connected=0 conn_id=4 reason=0x0016
08-18 16:06:31.363 12765-12835/? W/bt-btif﹕ bta_gattc_conn_cback() - cif=5 connected=0 conn_id=5 reason=0x0016
08-18 16:06:31.366 12765-12807/? D/BtGatt.GattService﹕ onDisconnected() - clientIf=5, connId=5, address=C1:D1:22:BA:F5:13
here im getting onDescriptorWrite with status 133
D/BluetoothGatt﹕ onClientConnectionState() - status=22 clientIf=5 device=C1:D1:22:BA:F5:13
16 表示 BTA_GATT_CONN_TERMINATE_LOCAL_HOST
22 表示 BTA_GATT_CONN_LMP_TIMEOUT
在nordics github上问这个:https://github.com/NordicSemiconductor/Android-nRF-Toolbox/issues/9#issuecomment-132191406
【问题讨论】:
-
更多细节,如果我只保存 ble 设备地址并使用 bluetoothAdapter.getRemoteDevice(address) 连接,那么我永远不会遇到这个问题。只有在绑定时,也许我的ble设备重新启动后绑定信息不再有效?债券保留了哪些信息?
-
您找到解决方案了吗?我也认为延迟不是解决它的好方法
-
请注意,22 不是 BTA_GATT_CONN_LMP_TIMEOUT - 22 和 0x22 之间存在巨大差异。 22 = 0x16。
-
嗨,我遇到了同样的问题,还没有找到任何解决方案。我的帖子链接在这里被击中 -> stackoverflow.com/q/47596419/4111151
标签: android bluetooth-lowenergy gatt