如何修复BLE中的重新连接时间?

时间:2016-10-27 14:26:03

标签: android bluetooth bluetooth-lowenergy

我遇到断开连接问题,并将BLE设备与手机连接。在我的手机中,我有一个断开按钮。如果手机和设备正在连接,我会按设备断开连接。它已成功断开连接。但是,当我调用connect函数时,重新连接需要10秒钟。这是我的代码和logcat。你能帮我减少重新连接的时间吗?

//Click button disconnect
public void onClickDisconnect(View view) {
    mBluetoothLeService.disconnect();
}

然后我再次连接,我将按如下方式调用connect函数:

 public boolean connect(final String address) {
        if (mBluetoothAdapter == null || address == null) {
            Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");
            return false;
        }

        // Previously connected device.  Try to reconnect.
        if (mBluetoothDeviceAddress != null && address.equals(mBluetoothDeviceAddress)
                && mBluetoothGatt != null) {
            Log.d(TAG, "Trying to use an existing mBluetoothGatt for connection.");
            if (mBluetoothGatt.connect()) {
                mConnectionState = STATE_CONNECTING;
                return true;
            } else {
                return false;
            }
        }

        final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
        if (device == null) {
            Log.w(TAG, "Device not found.  Unable to connect.");
            return false;
        }
        // We want to directly connect to the device, so we are setting the autoConnect
        // parameter to false.

        //mBluetoothGatt = device.connectGatt(this, true, mGattCallback);
        new Handler(getMainLooper()).post(new Runnable() {
            @Override
            public void run() {
                if (device != null) {
                    mBluetoothGatt = device.connectGatt(getApplicationContext(), true, mGattCallback);
                }
            }
        });
}

这是我的logcat

10-27 23:19:37.284 13162-13162/com.example.blechat D/BluetoothGatt: close()
10-27 23:19:37.284 13162-13162/com.example.blechat D/BluetoothGatt: unregisterApp() - mClientIf=6
10-27 23:19:37.314 13162-13162/com.example.blechat D/BluetoothLeService: Trying to create a new connection.
10-27 23:19:37.354 13162-13162/com.example.blechat D/BluetoothGatt: connect() - device: 00:02:5B:00:15:33, auto: true
10-27 23:19:37.354 13162-13162/com.example.blechat D/BluetoothGatt: registerApp()
10-27 23:19:37.354 13162-13162/com.example.blechat D/BluetoothGatt: registerApp() - UUID=23513bb1-c4fc-4203-ad3a-d58c38f2ddfb
10-27 23:19:37.394 13162-13706/com.example.blechat D/BluetoothGatt: onClientRegistered() - status=0 clientIf=6
10-27 23:19:42.374 13162-13162/com.example.blechat D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
10-27 23:19:48.994 13162-13162/com.example.blechat D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
10-27 23:19:56.704 13162-13706/com.example.blechat D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=6 device=00:02:5B:00:15:33

1 个答案:

答案 0 :(得分:-1)

当客户端在链路层级别发送连接请求时,它会等待来自设备的广告数据包,指示服务器处于可连接状态。这可能需要一些时间,具体取决于服务器的广告时间间隔。

因此,减少连接(和重新连接)时间的方法通常是增加BLE设备上的广告频率。但请记住,这也会增加设备的能耗。在大多数情况下,如果您可以在未使用设备的剩余时间内节省大量能源,则可以接受10-20秒的间隔(因此,平均重新连接持续时间为5-10秒)。

但是,您可以以断开连接后不久的方式配置设备,将广告时间间隔设置为更低的值,并在特定时间跨度后返回到原始时间间隔。如果快速重新连接是一个常见的用例,那么这可能是最佳选择。

但是,如果你真的需要快速反应时间,那么BLE可能不是最佳选择,而经典蓝牙则更受欢迎。蓝牙低功耗优化用于低能耗,而不是速度。