Android 请慢慢连接

Android 请慢慢连接,android,performance,bluetooth,bluetooth-lowenergy,connect,Android,Performance,Bluetooth,Bluetooth Lowenergy,Connect,嗨,我正在写一个安卓应用程序来连接一个可编程的外围设备。Android 4.4.2,Galaxy Nexus 我在设备上有一个指示灯,指示连接状态 问题是从调用connectGatt()到接收onConnectionStateChange的持续时间不一致。有时速度很快,但大部分时间需要5秒或更长时间。关闭/打开蓝牙没有任何效果 我在PC上试用了TI-BTool和TI-Dongle,它总是能很快建立连接 我也试过用iphone5s,速度也很快 有人也经历过这个问题吗 我们有没有可能改进这一点 我曾

嗨,我正在写一个安卓应用程序来连接一个可编程的外围设备。Android 4.4.2,Galaxy Nexus

我在设备上有一个指示灯,指示连接状态

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

我在PC上试用了TI-BTool和TI-Dongle,它总是能很快建立连接

我也试过用iphone5s,速度也很快

  • 有人也经历过这个问题吗
  • 我们有没有可能改进这一点

  • 我曾尝试过慢速连接,但仅当尝试重新连接远程设备时,第一次连接设备时没有问题,但重新连接仍然是onClientRegistered()方法中的连接

    将true传递给connectGatt()自动连接参数请求后台连接,在传递false请求时,直接连接。BluetoothGatt#connect()始终请求后台连接

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

    直接连接的间隔为60毫秒,窗口为30毫秒,因此连接完成得更快。此外,一次只能有一个挂起的直接连接请求,该请求在30秒后超时。调用状态为2、状态为133的onConnectionStateChange()以指示此超时

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


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

    好的,我找到了原因,我想我误用了API:之前我使用第二个参数调用connectGatt=true ConnectGatgatt(上下文,true,gattCallback);但现在我将其更改为connectGatt(context,false,gattCallback);连接时间大大提高了我已经设置了connectGatt(context,false,gattCallback),但是仍然需要4-5秒才能连接到ble设备如果Android的文档真的提到了这一切,那将是令人惊讶的。这有点重要。详细描述导致直接连接而非背景连接的竞争条件:我刚刚注意到,我的运行Android 5.0.2的Sony Xperia(D5803)不调用status=133和newState=Connected的“onConnectionStateChange”,而是调用“onConnectionStateChange”在newState=Disconnected.Til 2016-08-09之前,官方文档中没有与此答案相近的内容。然而,超时现在似乎收到了“断开连接”的信号。这非常有用。只是改变了这一点,大大提高了连接速度。我面临着完全相同的问题,请张贴答案