gpt4 book ai didi

android - 使用绑定(bind)设备时的 gatt.writeDescriptor 错误状态回调

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:13:05 25 4
gpt4 key购买 nike

我正在开发一个需要自动连接到蓝牙外设的应用。

我有一个执行以下操作的粘性服务:

  1. 在绑定(bind)设备中寻找所需的设备
  2. 如果设备(第一次)没有正常运行,则扫描它并使用 device.createBond() 绑定(bind)它,通过收听 ACTION_BOND_STATE_CHANGED 广播等待绑定(bind)完成
  3. 使用 device.connectGatt(ctx,true,callback) 连接到它
  4. 等待带有连接状态的 onConnectionStateChange 回调
  5. 使用 gatt.discoverServices() 开始服务发现
  6. 等待 onServicesDiscoverd 回调
  7. 通过使用 gatt.writeDescriptor 编写描述符来启用特性通知
  8. 等待状态为成功的 onDescriptorWrite 回调 BluetoothGatt.GATT_SUCCESS (0)
  9. 处理收到的通知

这是第一次一切正常。当设备断开连接(例如超出范围或关闭)时,粘性服务回调 gatt.disconnect()gatt.close(),重新启动并执行所有操作又是这样,这次它使用绑定(bind)设备进行连接。

在第 7 步之前一切正常,这意味着我收到状态为 133 的 onDescriptorWrite 回调,有时会收到状态为 0 和状态 22 的连接状态更改回调。

关于状态 133 或 22 的含义,我无法在网上找到任何信息。

知道为什么会这样吗?

我现在正在解决这个问题,方法是通过移除绑定(bind)(反射)对错误的 onDescriptorWrite 回调作出 react ,然后使用新扫描的设备重新执行所有操作。

所以基本上我使用绑定(bind)只是为了等待设备连接,然后重新启动整个过程。

这意味着绑定(bind)设备的 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

最佳答案

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

按照他们的建议,在调用 connectGatt 后增加了 2 秒的延迟,现在它可以工作了。

关于android - 使用绑定(bind)设备时的 gatt.writeDescriptor 错误状态回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32070944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com