我正在开发一款需要自动连接到外设的应用程序。
我有一项粘性服务,可执行以下操作:
device.createBond()
与其绑定,等待通过收听ACTION_BOND_STATE_CHANGED广播完成绑定device.connectGatt(ctx,true,callback)
onConnectionStateChange
回调gatt.discoverServices()
onServicesDiscoverd
回拨gatt.writeDescriptor
BluetoothGatt.GATT_SUCCESS (0)
这一切都是第一次正常。当设备断开连接(例如,超出范围或关闭)时,粘性服务回调gatt.disconnect()
和gatt.close()
,重新启动并再次执行所有操作,这次它使用绑定设备进行连接。 / p>
一切正常,直到第7步,这意味着我得到一个回调到onDescriptorWrite
状态133,有时接着是状态为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
答案 0 :(得分:1)
在nordics github上问这个: https://github.com/NordicSemiconductor/Android-nRF-Toolbox/issues/9#issuecomment-132191406
根据他们的建议在调用connectGatt后添加了2秒延迟,现在它可以正常工作。