使用绑定设备时gatt.writeDescriptor错误状态回调

时间:2015-08-18 11:19:18

标签: android bluetooth-lowenergy gatt

我正在开发一款需要自动连接到外设的应用程序。

我有一项粘性服务,可执行以下操作:

  1. 在绑定设备中查找所需设备
  2. 如果它没有对设备进行罚款(第一次),则扫描并使用device.createBond()与其绑定,等待通过收听ACTION_BOND_STATE_CHANGED广播完成绑定
  3. 使用device.connectGatt(ctx,true,callback)
  4. 连接到它
  5. 等待连接状态的onConnectionStateChange回调
  6. 使用gatt.discoverServices()
  7. 启动服务发现
  8. 等待onServicesDiscoverd回拨
  9. 通过使用gatt.writeDescriptor
  10. 编写描述符来启用特征通知
  11. 等待成功状态为BluetoothGatt.GATT_SUCCESS (0)
  12. 的onDescriptorWrite回调
  13. 会收到收到的通知
  14. 这一切都是第一次正常。当设备断开连接(例如,超出范围或关闭)时,粘性服务回调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  
    

    看起来如下:
    https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/idea133/bta/include/bta_gatt_api.h#169

    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

1 个答案:

答案 0 :(得分:1)

在nordics github上问这个: https://github.com/NordicSemiconductor/Android-nRF-Toolbox/issues/9#issuecomment-132191406

根据他们的建议在调用connectGatt后添加了2秒延迟,现在它可以正常工作。