Android 低功耗蓝牙 (BLE) API 尚未准备好迎接黄金时段

标签 android performance bluetooth-lowenergy gatt

我正在开发一款支持两个 BLE 传感器(心率、步幅)的健身应用程序。我最终得到了两个受限服务(每个传感器一个),这些服务由我的主要 Activity 调用和受限。这是在 Nexus 7 II 上运行的,带有 KitKat。我花了几天时间试图让应用程序进入稳定状态。 Gatt 连接和通知在干净重启后立即正常工作。我遇到的问题是在一个或两个设备断开连接并需要重新连接后让事情恢复到工作状态。由于其他人报告了类似的问题,我开发并测试了各种方案,包括在 Activity 重新启动时保持服务和连接继续、关闭连接和服务器然后重新启动、仅关闭而不断开连接、等待之前重新连接等。目前,使用一个传感器,我可以让应用程序在大部分时间重新连接。对于两个传感器,大部分时间都不会重新建立连接。考虑到每周都有许多新的 BLE 设备,android BLE API 如此脆弱真是太可惜了。我想知道是否还有其他人对多个 BLE 传感器有好运,他们是否会分享他们的方法来使其正常工作。

最佳答案

这不是一个非常有问题的问题,但您的评论表明了解 0x85 的含义会有所帮助。 Android BLE API 取自三星的第二个 BLE API,但并非三星​​定义的所有常量都适用。

0x85 = 133(您也在日志中看到)是 GATT_ERROR。基本上这意味着出了点问题,可能是外围设备超出了设备的范围,或者蓝牙芯片出了问题。我发现在 onConnectionStateChange 的 BluetoothGatt 上调用 connect() 是一个不错的解决方案,因为它会等待事情得到解决并在可能的时候连接。

0x8D = 141 GATT_ALREADY_OPEN 这个不言自明。

另一件需要注意的事情是确保蓝牙发生的任何事情都按顺序发生。在上一个操作的结果发生之前,多个线程向 BluetoothGatt 发送命令往往不是一件好事。

关于Android 低功耗蓝牙 (BLE) API 尚未准备好迎接黄金时段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271432/

相关文章:

java - 针对更大的字符串优化 Java 中的 native 消息主机

android - AppCompatActivity 无法解析为 Eclipse 中的类型

java - compareTo 与原语 -> 整数/整数

java - 元素 eElement = (元素) nNode;应用程序崩溃

c++ - 我怎样才能完美地将参数转发给 STL 集合?

ios - 核心蓝牙 : How can the peripheral manager know that the central received an indication?

iphone - 未连接蓝牙设备不再可用时 IOS 收到通知

android - 找到最近的信标

android - 根据缩略图更改 SurfaceView 图像

java - 已签名的APK中出现Android Gradle警告问题。请首先更正以上警告