android ble慢慢连接

时间:2014-03-06 03:28:41

标签: android performance bluetooth bluetooth-lowenergy connect

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

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

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

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

我也尝试使用iPhone 5S,速度也很快。

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

2 个答案:

答案 0 :(得分:52)

将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(),也会导致直接连接请求。

答案 1 :(得分:2)

我尝试过慢速连接,但只有在尝试重新连接远程设备时,首次连接设备才会出现问题,但重新连接仍然是onClientRegistered()方法中的连接