android ble慢慢连接

use*_*131 31 performance android bluetooth connect bluetooth-lowenergy

嗨,我正在编写一个Android应用程序来连接到BLE外围设备.Android 4.4.2,Galaxy Nexus.

我在设备上有一个LED指示连接状态.

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

我在PC上使用TI BLE Dongle 尝试了TI BTool,它总是能够非常快速地建立连接.

我也试过iPhone 5S,它也很快.

  1. 任何人都遇到过这个问题吗?
  2. 我们有什么机会改善这个吗?

小智 56

传递true给connectGatt()autoconnect参数请求后台连接,同时传递false请求直接连接.BluetoothGatt #connect()始终请求后台连接.

背景连接(根据4.4.2 AOSP的Bluedroid来源)扫描间隔为1280ms,窗口为11.25ms.这相当于约0.9%的占空比,这解释了为什么连接在不扫描时可能需要很长时间才能完成.

直接连接的间隔为60ms,窗口为30ms,因此连接完成得更快.此外,一次只能有一个直接连接请求待处理,并且在30秒后超时.使用state = 2,status = 133调用onConnectionStateChange()以指示此超时.

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

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

  • 如果Android的文档实际上提到了这一点,那将是惊人的.这很重要. (21认同)

小智 2

我已经尝试过慢速连接,但仅在尝试重新连接远程设备时,第一次连接设备没有问题,但重新连接仍保留 onClientRegistered() 方法中的连接

  • 我面临完全相同的问题,请发布答案 (2认同)