0

我正在尝试在我的 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 trigger

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

4

1 回答 1

0

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

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

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

于 2020-12-25T08:41:05.747 回答