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,它也很快.
小智 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(),也会导致直接连接请求.
小智 2
我已经尝试过慢速连接,但仅在尝试重新连接远程设备时,第一次连接设备没有问题,但重新连接仍保留 onClientRegistered() 方法中的连接