我正在开发一款支持两个BLE传感器(心率,步幅)的健身应用程序。我最终得到了两个有限的服务(每个传感器一个),由我的主要活动调用和限制。这是在带有KitKat的Nexus 7 II上运行的。我花了几天时间试图让应用程序恢复稳定状态。 Gatt连接和通知在干净重启后完美运行。我遇到的问题是在一个或两个设备断开连接并需要重新连接后让事情恢复到工作状态。由于其他人已经报告了类似的问题,我已经开发并测试了各种场景,包括在重新启动活动时保持服务和连接,关闭连接和服务器,然后开始新的,仅关闭而不是断开连接,等待之前重新连接等。目前,通过一个传感器,我可以让应用程序在大多数时间重新连接。使用两个传感器,大多数时候都不会重新建立连接。考虑到每周有许多新的BLE设备,Android BLE API非常脆弱,真是太遗憾了。我想知道是否有其他人对多个BLE传感器有好运,如果他们愿意分享他们的方法让它运转起来。
答案 0 :(得分:3)
这不是一个非常质疑的问题,但您的评论表明知道0x85意味着什么会有所帮助。 Android BLE API取自三星的第二个BLE API,但并非三星定义的所有常量都将其完成。
0x85 = 133(您也在日志中看到)是GATT_ERROR。基本上这意味着出了问题,可能是外围设备超出设备范围,或蓝牙芯片搞砸了。我发现在onConnectionStateChange上调用BluetoothGatt上的connect()是一个不错的解决方案,因为它会等待事情得到整理并在可能时连接。
0x8D = 141 GATT_ALREADY_OPEN这个是不言自明的。
要注意的另一件事是确保蓝牙发生的任何事情顺序发生。在上一个动作发生之前,多个线程向BluetoothGatt发送命令往往不是一件好事。