当前位置: 首页 > 知识库问答 >
问题:

gatt.write描述符错误状态回调使用绑定设备时

周云
2023-03-14

我正在开发一个应用程序,需要自动连接到可编程外围设备。

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

  1. 在绑定设备中查找所需设备
  2. 如果它没有(第一次)修复设备,扫描它并使用device绑定到它。createBond(),通过收听操作_bond_STATE_CHANGED broadcast来等待绑定完成
  3. 使用设备连接到它。connectGatt(ctx,true,callback)
  4. 等待onConnectionStateChange已连接状态的回调
  5. 使用gatt启动服务发现。discoverServices()
  6. 等待服务发现回调
  7. 通过使用gatt编写描述符来启用特性通知。writeDescriptor
  8. 等待onDescriptorWrite回调,状态为成功BluetoothGatt。关贸总协定的成功(0)
  9. 处理收到的通知

这都是第一次工作正常。当设备断开连接(例如超出范围或关闭)时,粘性服务回调gatt.disconnect()gatt.close(),重新启动并再次执行所有这些操作,这次它使用粘合装置来连接。

在第7步之前,一切都正常,这意味着我会得到一个状态为133的onDescriptorWrite回调,然后是状态为0和状态为22的连接状态更改回调。

我在网上找不到任何关于133或22的信息。

知道为什么会这样吗?

我现在正在努力解决这个问题,通过移除绑定(反射),对坏的onDescriptorWrite回调做出反应,然后用新扫描的设备重新做所有事情。

所以基本上,我使用bond只是为了等待设备连接,然后重新启动整个程序。

这意味着用于绑定设备的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个答案

黄和怡
2023-03-14

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

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

 类似资料:
  • 我正在创建一个Android应用程序,该应用程序使用Android Studio扫描所有附近的BLE(蓝牙低功耗)设备。 我想我已经实施了所有这些文件: https://developer.android.com/guide/topics/connectivity/bluetooth/ble-overview https://developer.android.com/guide/topics/c

  • 我正在使用Appium Python AWS Device Farm for iOS设备为我的公司进行自动化测试。 然而,当我将我的. ipa文件和Appium Python测试上传到AWS设备群时,运行卡住了,并向我显示状态为“错误”,如果我单击运行以获取详细视图,它会在所有设备运行中显示“待定”(见下面的截图:) 我很确定这不是我的Appium Python测试脚本的问题,因为当将同一个脚本与

  • 问题内容: 尝试附加到go例程中的日志文件时,我得到了错误的文件描述符。 该文件存在,并且具有666的权限。起初我想很好,也许是因为他们每个人都试图同时打开文件。我实现了一个互斥体来尝试避免这种情况,但是遇到了同样的问题,因此我将其删除。 问题答案: 您需要添加标志: 为了说明,这是Linux文档:http : //man7.org/linux/man- pages/man2/openat.2.h

  • 如果我的WebClient请求收到HTTP 4xx或5xx错误,我需要进行另一次HTTP调用。 对于这种情况,正确的做法是什么?

  • 在我的不和谐机器人,我希望所有的用户有一个可定制的配置文件。每当运行命令!profile或!p时,机器人就会显示一个包含bio(类似于“Hello World”之类的介绍)、自定义嵌入颜色和其他数据库信息(如硬币、能源等)的嵌入。我想确保当他们运行类似!desc Hello World的东西时,他们的profile embed将有消息Hello World,如果他们运行!desc Lorem,他们

  • 我试图使用回调将验证输入。 当我试图在文本框中输入时,我遇到了下面的错误。有人能帮我解释一下为什么我会犯这个错误,以及我如何纠正它吗。 不允许回调吗?我错过了什么? 未捕获错误:对象作为React子对象无效(找到:具有键{dispatchConfig、_TargetList、nativeEvent、type、target、currentTarget、eventPhase、bubbles、cance