我正在开发一个应用程序,需要自动连接到可编程外围设备。
我有一个粘性服务,可以执行以下操作:
device绑定到它。createBond()
,通过收听操作_bond_STATE_CHANGED broadcast来等待绑定完成设备连接到它。connectGatt(ctx,true,callback)
onConnectionStateChange
已连接状态的回调gatt启动服务发现。discoverServices()
gatt编写描述符来启用特性通知。writeDescriptor
BluetoothGatt。关贸总协定的成功(0)
这都是第一次工作正常。当设备断开连接(例如超出范围或关闭)时,粘性服务回调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
在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