android - 蓝牙 LE 连接时间/缓存

标签 android bluetooth bluetooth-lowenergy

我想连接到蓝牙设备并以最快的方式将值写入特征。目前我的代码给出了不好的结果:

1) BLE 扫描 - 如您所见,我对要连接的设备的 MAC 地址进行了硬编码。我还获得了 connectGatt 方法调用的时间戳。

    @Override
    public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {

        if(device.getAddress().equals("F1:9F:EE:6B:AB:83")) {
            mConnectedGatt = device.connectGatt(this, false, mGattCallback);
            start = System.currentTimeMillis()/1000;
        };
    }

2) onConnectionChanged - 我得到另一个时间戳并减去它们以了解连接操作持续了多少时间

    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        super.onConnectionStateChange(gatt, status, newState);

        end = System.currentTimeMillis()/1000;
        Log.d("QWERTY", "TIME " + (end - start));

        if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED) {

            Log.d("QWERTY","Success");
            gatt.discoverServices();

        } else if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_DISCONNECTED) {

            Log.d("QWERTY","Disconnected");

        } else if (status != BluetoothGatt.GATT_SUCCESS) {
            Log.d("QWERTY","Connection error");
            gatt.disconnect();
        }
    }

这是我的主要问题。 device.connectGatt 和 onConnectionStateChange 之间的时间需要 3 - 8 秒,这对我来说太长了。如果是 1 秒左右我会很高兴。 写入特性在 onServicesDiscovered 监听器中花费的时间不到一秒,因此这不是问题。

问题 1):有什么办法可以加快连接时间吗?

问题 2):有什么方法可以将与设备的蓝牙连接存储在缓存中,这样它在第一次连接时会持续很长时间,并且在以后的调用过程中会更快?

问题 3):还有什么其他建议可以让它运行得更快吗?也许我的方法不好。

最佳答案

1) 是的,您的外设必须在连接时提供更好的连接间隔参数。发现服务/特性后,如果需要,您可以随时再次减慢它们的速度,以节省持久连接的电池电量。

2)绑定(bind)可能有助于将来的连接。

3) 如果您有很多服务/特性,那么需要更长的时间来发现它们并在较低层堆栈中生成句柄表。对于 iOS,您应该发送 20ms (32) 的最小连接间隔和 40ms (64) 的最大连接间隔,但您可以使用 10ms-20ms 进行破解,您将获得大约 18-19ms 的间隔。 在 Android 上,这可能过于激进,可能会导致三星拒绝。所以尝试[20;40ms]

关于android - 蓝牙 LE 连接时间/缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24370184/

相关文章:

android - 使用 Workmanager 进行 Hilt Instrumentation 测试不工作

java - 如何解决 java.net.MalformedURLException : Protocol not found: 9 in android

android - versionName 是否必须增加?

android - 创建蓝牙应用程序最快的移动平台是什么?

android - Android 6.0.1 中的 Gatt 缓存

c++ - 使用Qt的 `QLowEnergyController`的两个实例连接到两个BLE设备

ios - BLE(蓝牙启用设备)ios

java - 将 JDO 项目迁移到 google cloud endpoints v2,服务器返回 NoClassDefFoundError

Android Nearby Connections - 如何防止与连接和发现重叠

android - Android 中蓝牙 LE 设备的最大绑定(bind)数是多少,即 'Paired Devices'?