一起调用 connectGatt() 和 createBond()

问题描述

我正在尝试在我的 Android 手机和我的设备之间建立联系。在他们通过我的 device.connectGatt() 呼叫 gattCallback 之前,他们建立了良好的联系。但是现在我还想通过调用 device.createBond() 添加绑定,我的 onConnectionStateChange 显示连接和断开连接的备用模式,连接时状态代码为 0,断开连接时状态代码为 8。这是我如何尝试将 connectGattcreateBond 一起使用的代码片段。

    @Override
    public void onScanResult(int callbackType,ScanResult result) {
        System.out.println("on scan result");
        super.onScanResult(callbackType,result);
        BluetoothDevice device = result.getDevice();
        synchronized (this) {
            if (mBluetoothGatt == null) {
                if (device.createBond()) {
                    System.out.println("create bond success");
                    mBluetoothGatt = device.connectGatt(mListener.retrieveApplicationContext(),true,mGattCallback);
                }
                else System.out.println("create bond sb");
            }
        }
    }

这样调用这两个方法有什么问题吗?我在互联网上搜索了创建债券,但没有一个页面使用 createBond 和 connectGatt 在一起。我只从这篇文章中得到了一个关于如何以这种方式调用这两个方法提示Android BLE onCharacteristicChanged() using notify not triggered

此外,我的 broadCastReceiver 也总是显示设备绑定,但从不显示设备绑定。

解决方法

如果未使用 createBond 设置为 false 进行连接,则 autoConnect 方法将首先在内部连接到设备。这意味着如果设备在此期间从未成功连接,则绑定尝试将在 30 秒后中止。但是您使用 autoConnect 设置为 true 进行连接,这意味着没有超时。因此,如果由于某种原因连接需要 31 秒,则不会发生绑定。

如果我是你,我会首先自己连接设备,当设备成功连接并发现服务(并检查它是否具有所需的服务)时,调用 createBond,以确保一切正常就在结合之前。

状态代码 8 表示“连接超时”。这意味着连接已启动并正在运行,但在无线电级别意外断开,这不是软件错误,而是当您超出范围时自然发生的事情,但也是由于错误的硬件,例如错误的固件或错误的晶体时钟频率。