android ble连接慢

标签 android performance bluetooth bluetooth-lowenergy connect

您好,我正在编写一个 Android 应用程序来连接 BLE 外围设备。安卓 4.4.2,银河 Nexus。

我的设备上有一个 LED 来指示连接状态。

问题是从 connectGatt() 调用到接收 onConnectionStateChange STATE_CONNECTED 的持续时间是如此不一致。有时它非常快,但大多数时候需要 5 秒或更长时间。关闭/打开蓝牙没有任何作用。

我用 TI BLE 加密狗在 PC 上尝试了 TI BTool,它总是很快建立连接。

我也试过 iPhone 5S,速度也很快。

  1. 有人也遇到过这个问题吗?
  2. 我们是否有机会改进这一点?

最佳答案

将 true 传递给 connectGatt() 自动连接参数请求后台连接,而传递 false 请求直接连接。 BluetoothGatt#connect() 总是请求后台连接。

后台连接(根据来自 4.4.2 AOSP 的 Bluedroid 来源)的扫描间隔为 1280 毫秒,窗口为 11.25 毫秒。这对应于大约 0.9% 的占空比,这解释了为什么连接在不扫描时可能需要很长时间才能完成。

直接连接的间隔为 60 毫秒,窗口为 30 毫秒,因此连接完成速度更快。此外,一次只能有一个未决的直接连接请求,并且在 30 秒后超时。 onConnectionStateChange() 以 state=2, status=133 被调用以指示此超时。

我已经在 Nexus5 上验证了这种行为,但显然是 YMMV。

我应该提一下,即使将 autoconnect=true 传递给 BluetoothDevice#connectGatt(),BluetoothGatt.java 中的竞争条件也会导致直接连接请求。

关于android ble连接慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22214254/

相关文章:

java - 从 Android 发送数据

android - 减慢用户在 Android 中按钮混搭的能力

c++ - 如果我有固定数量的相互独立的计算,多线程是否会显着提高性能?

android - WebView打开后,Android默认语言环境更改

android - 如何检测屏幕旋转

android - VS 2015 Enterprise 的所有iOS 和Android 开发能力都在Win 8.1 中可用吗?

python - 快速找到最接近某个值的数组中的索引

android - 如何在 Android 应用程序中接受蓝牙接收的文件?

android - 通过蓝牙传输文件失败

java - 在android中执行蓝牙文件传输时出错