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