蓝牙Gatt问题onClientConnectionState() - status = 8 clientIf = 29

时间:2017-07-11 06:54:31

标签: android bluetooth bluetooth-lowenergy

我正在制作Android BLE应用程序。根据文件,我提出申请。我的问题是,有时应用程序会运行良好,但有时会抛出错误。有2个日志,一个用于成功,第二个用于错误。每次蓝牙断开,我发送关闭方法。我不知道自己被困在哪里。

第一次成功记录

7-11 11:44:54.371 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: try to connecte
07-11 11:44:54.371 17649-17649/com.clavax.ultrapen D/BluetoothGatt: connect() - device: 00:13:43:07:98:D4, auto: false
07-11 11:44:54.371 17649-17649/com.clavax.ultrapen D/BluetoothGatt: registerApp()
07-11 11:44:54.371 17649-17649/com.clavax.ultrapen D/BluetoothGatt: registerApp() - UUID=240e1b71-f4c5-43f2-9535-cd337b501374
07-11 11:44:54.421 17649-17660/com.clavax.ultrapen D/BluetoothGatt: onClientRegistered() - status=0 clientIf=10
07-11 11:44:54.611 17649-13359/com.clavax.ultrapen D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=10 device=00:13:43:07:98:D4
07-11 11:44:54.611 17649-13359/com.clavax.ultrapen I/BluetoothGatt 1: BRSP connection created 2 0
07-11 11:44:54.621 17649-17649/com.clavax.ultrapen D/BluetoothGatt: discoverServices() - device: 00:13:43:07:98:D4
07-11 11:44:54.621 17649-17649/com.clavax.ultrapen D/BluetoothGatt 1: Discover Services started: true
07-11 11:44:54.621 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1:  connection created
07-11 11:44:54.811 17649-13359/com.clavax.ultrapen D/BluetoothGatt: onClientConnParamsChanged() - Device=00:13:43:07:98:D4 interval=6 status=0
07-11 11:44:55.231 17649-17661/com.clavax.ultrapen D/BluetoothGatt: onSearchComplete() = Device=00:13:43:07:98:D4 Status=0
07-11 11:44:55.231 17649-17661/com.clavax.ultrapen I/BluetoothGatt 1: BRSP service discovered
07-11 11:44:55.231 17649-17661/com.clavax.ultrapen D/BluetoothGatt: setCharacteristicNotification() - uuid: fdd6b4d3-046d-4330-bdec-1fd0c90cb43b enable: true
07-11 11:44:55.231 17649-17661/com.clavax.ultrapen I/BluetoothGatt 1: BRSP service discovered 2
07-11 11:44:55.261 17649-13359/com.clavax.ultrapen I/BluetoothGatt 1: BRSP description write
07-11 11:44:55.261 17649-13359/com.clavax.ultrapen I/BluetoothGatt 1: BRSP initstate1
07-11 11:44:55.261 17649-13359/com.clavax.ultrapen D/BluetoothGatt: setCharacteristicNotification() - uuid: 18cda784-4bd3-4370-85bb-bfed91ec86af enable: true
07-11 11:44:55.261 17649-13359/com.clavax.ultrapen I/BluetoothGatt 1: BRSP initstate notification1true
07-11 11:44:55.261 17649-13359/com.clavax.ultrapen D/BluetoothGatt: onClientConnParamsChanged() - Device=00:13:43:07:98:D4 interval=39 status=0
07-11 11:44:55.761 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: BRSP initstate write1true
07-11 11:44:55.841 17649-13359/com.clavax.ultrapen I/BluetoothGatt 1: BRSP description write
07-11 11:44:55.841 17649-13359/com.clavax.ultrapen I/BluetoothGatt 1: BRSP initstate2
07-11 11:44:55.841 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: BRSP initstate read2true
07-11 11:44:55.931 17649-13359/com.clavax.ultrapen I/BluetoothGatt 1: BRSP characteristic read 1
07-11 11:44:55.931 17649-13359/com.clavax.ultrapen I/BluetoothGatt 1: BRSP initstate3
07-11 11:44:55.941 17649-13359/com.clavax.ultrapen I/BluetoothGatt 1: BRSP brsp m0detrue
07-11 12:07:21.461 17649-21210/com.clavax.ultrapen I/BluetoothGatt 1: BRSP characteristic read 2
07-11 12:07:21.561 17649-21210/com.clavax.ultrapen I/BluetoothGatt 1: BRSP characteristic write 1
07-11 12:07:21.561 17649-21210/com.clavax.ultrapen I/BluetoothGatt 1: BRSP characteristic write 3
07-11 12:07:21.581 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: BRSP write byte0
07-11 12:07:21.581 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: BRSP send packets
07-11 12:07:21.581 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: BRSP sending
07-11 12:07:21.581 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: BRSP sendingtrue
07-11 12:07:21.601 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: BRSP send packets
07-11 12:07:21.601 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: BRSP return
07-11 12:07:21.661 17649-21210/com.clavax.ultrapen I/BluetoothGatt 1: BRSP characteristic write 1
07-11 12:07:21.661 17649-21210/com.clavax.ultrapen I/BluetoothGatt 1: BRSP characteristic write 2
07-11 12:07:21.661 17649-21210/com.clavax.ultrapen I/BluetoothGatt 1: BRSP send packets
07-11 12:07:21.661 17649-21210/com.clavax.ultrapen I/BluetoothGatt 1: BRSP sending
07-11 12:07:21.661 17649-21210/com.clavax.ultrapen I/BluetoothGatt 1: BRSP sendingtrue
07-11 12:07:21.801 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP characteristic write 1
07-11 12:07:21.801 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP characteristic write 2
07-11 12:07:21.801 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP send packets
07-11 12:07:21.801 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP bytes null
07-11 12:07:21.901 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP characteristic change 1
07-11 12:07:21.901 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP characteristic change 2
07-11 12:07:21.901 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP write byte�eqInfo|PTType>ORP|P
continue.........................................

第二次登录

07-11 11:42:25.451 17649-17649/com.clavax.ultrapen D/BluetoothGatt: connect() - device: 00:13:43:07:98:D4, auto: false
07-11 11:42:25.451 17649-17649/com.clavax.ultrapen D/BluetoothGatt: registerApp()
07-11 11:42:25.451 17649-17649/com.clavax.ultrapen D/BluetoothGatt: registerApp() - UUID=8bcbf61d-323c-46c8-b509-3f29dbcc5002
07-11 11:42:25.491 17649-13359/com.clavax.ultrapen D/BluetoothGatt: onClientRegistered() - status=0 clientIf=8
07-11 11:42:25.881 17649-17660/com.clavax.ultrapen D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=8 device=00:13:43:07:98:D4
07-11 11:42:25.881 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP connection created 2 0
07-11 11:42:25.891 17649-17649/com.clavax.ultrapen D/BluetoothGatt: discoverServices() - device: 00:13:43:07:98:D4
07-11 11:42:25.891 17649-17649/com.clavax.ultrapen D/BluetoothGatt 1: Discover Services started: true
07-11 11:42:25.891 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1:  connection created
07-11 11:42:26.081 17649-17660/com.clavax.ultrapen D/BluetoothGatt: onClientConnParamsChanged() - Device=00:13:43:07:98:D4 interval=6 status=0
07-11 11:42:26.541 17649-17661/com.clavax.ultrapen D/BluetoothGatt: onSearchComplete() = Device=00:13:43:07:98:D4 Status=0
07-11 11:42:26.541 17649-17661/com.clavax.ultrapen I/BluetoothGatt 1: BRSP service discovered
07-11 11:42:26.541 17649-17661/com.clavax.ultrapen D/BluetoothGatt: setCharacteristicNotification() - uuid: fdd6b4d3-046d-4330-bdec-1fd0c90cb43b enable: true
07-11 11:42:26.541 17649-17661/com.clavax.ultrapen I/BluetoothGatt 1: BRSP service discovered 2
07-11 11:42:26.551 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP description write
07-11 11:42:26.551 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP initstate1
07-11 11:42:26.551 17649-17660/com.clavax.ultrapen D/BluetoothGatt: setCharacteristicNotification() - uuid: 18cda784-4bd3-4370-85bb-bfed91ec86af enable: true
07-11 11:42:26.551 17649-17660/com.clavax.ultrapen I/BluetoothGatt 1: BRSP initstate notification1true
07-11 11:42:26.561 17649-17661/com.clavax.ultrapen D/BluetoothGatt: onClientConnParamsChanged() - Device=00:13:43:07:98:D4 interval=39 status=0
07-11 11:42:27.051 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: l;e scanningtrue
07-11 11:42:27.131 17649-17649/com.clavax.ultrapen I/BluetoothGatt 1: BRSP initstate write1true
07-11 11:42:46.571 17649-17661/com.clavax.ultrapen I/BluetoothGatt 1: BRSP description write
07-11 11:42:46.571 17649-17661/com.clavax.ultrapen I/BluetoothGatt 1: BRSP initstate2
07-11 11:42:46.581 17649-13359/com.clavax.ultrapen D/BluetoothGatt: onClientConnectionState() - status=8 clientIf=8 device=00:13:43:07:98:D4
07-11 11:42:46.581 17649-13359/com.clavax.ultrapen I/BluetoothGatt 1: BRSP disconnection created 0 8     ******//here is the error throw****** 

如上面的Logs,第一次显示数据但第二​​次显示状态8 的问题,它将在3或4次成功连接后发生。我的想法是,如果有问题在代码中,它没有给我单一的成功连接。

// BluetoothServiceClass中的Bluetooth Gatt回调

@Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        String intentAction;
        if (newState == BluetoothProfile.STATE_CONNECTED) {
            int inputBufferSize = 1000;
            int outputBufferSize = 1000;
            _lastRTS = 0;
            inputBufferSize = (inputBufferSize < 1) ? DEFAULT_BUFFER_SIZE : inputBufferSize;
            inputBufferSize = (inputBufferSize < 1) ? DEFAULT_BUFFER_SIZE : inputBufferSize;

            setBuffers(inputBufferSize, outputBufferSize);


            Log.i("BluetoothGatt 1", "BRSP connection created " + newState + " " + status);
            intentAction = ACTION_GATT_CONNECTED;
            mConnectionState = STATE_CONNECTED;
            broadcastUpdate(intentAction);
            // Attempts to discover services after successful connection.

            Log.d(TAG, "Device connected");
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    boolean ans = mBluetoothGatt.discoverServices();
                    Log.d("BluetoothGatt 1", "Discover Services started: " + ans);
                }
            });


        } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
            intentAction = ACTION_GATT_DISCONNECTED;
            mConnectionState = STATE_DISCONNECTED;
            Log.i("BluetoothGatt 1", "BRSP disconnection created " + newState + " " + status);

            //    refreshDeviceCache(gatt);
            mBluetoothGatt.close();

            _initState = 0;
            _lastRTS = 0;
            _lastRTS = 0;
            setBuffers(_inputBuffer.size() + _inputBuffer.remainingCapacity(), _outputBuffer.size() + _outputBuffer.remainingCapacity());
            if (status != 8 && status != 22)
                broadcastUpdate(intentAction);
            else
                connect(mBluetoothDeviceAddress);
            //  mBluetoothGatt.close();
        }
    }
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {

    Log.i("BluetoothGatt 1", "BRSP service discovered");
    BluetoothGattService brspService1 = gatt.getService(BRSP_SERVICE_UUID1);
    BluetoothGattService brspService = gatt.getService(BRSP_SERVICE_UUID);
    List<BluetoothGattService> brspservices = getSupportedGattServices();

    if (brspService != null) {
        // Call the first write descriptor for initializing the BRSP
        // serrvice.
        mBluetoothGatt.setCharacteristicNotification(brspService.getCharacteristic(BRSP_RTS_UUID), true);
        BluetoothGattDescriptor RTS_CCCD = brspService.getCharacteristic(BRSP_RTS_UUID).getDescriptor(
                UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
        RTS_CCCD.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
        mBluetoothGatt.writeDescriptor(RTS_CCCD);

        Log.i("BluetoothGatt 1", "BRSP service discovered 2");
    }
}

@Override
public void onCharacteristicRead(BluetoothGatt gatt,
                                 BluetoothGattCharacteristic characteristic,
                                 int status) {
    Log.i("BluetoothGatt 1", "BRSP characteristic read 1");
    if (_initState < _initStepCount) {
        doNextInitStep();
    }
    if (characteristic.getUuid().equals(BRSP_INFO_UUID)) {
        characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, 1);
        Log.i("BluetoothGatt 1", "BRSP characteristic read 2");
    }
}

    @Override
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
        super.onCharacteristicWrite(gatt, characteristic, status);

        Log.i("BluetoothGatt 1", "BRSP characteristic write 1");
        if (_initState < _initStepCount) {
            doNextInitStep();
        }
        if (characteristic.getUuid().equals(BRSP_RX_UUID)) {
            if (status == BluetoothGatt.GATT_SUCCESS) {
          /*      _lastBytes = null;
                if (_outputBuffer.isEmpty())
                    _brspCallback.onSendingStateChanged(Brsp.this);*/
                Log.i("BluetoothGatt 1", "BRSP characteristic write 2");
            }
            _sending = false;
            sendPacket();
            // debugLog("RX characteristic wrote");
        } else if (characteristic.getUuid().equals(BRSP_MODE_UUID)) {
            characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, 0);
            Log.i("BluetoothGatt 1", "BRSP characteristic write 3");
            _outputBuffer.clear();
            String intentAction = ACTION_Eco_Send;
            broadcastUpdate(intentAction);
        }
        if (status != 0) {
            if (status == 15) {
                // Can't figure out a fix to the pairing issues as of yet
                // _gatt.getDevice().createBond();
                // TODO: Resend last write once bonded?
            }
        }
    }

    @Override
    public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
        Log.i("BluetoothGatt 1", "BRSP description read");
        if (_initState < _initStepCount) {
            doNextInitStep();
        }
        super.onDescriptorRead(gatt, descriptor, status);
    }

    @Override
    public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
        Log.i("BluetoothGatt 1", "BRSP description write");
        if (_initState < _initStepCount) {
            doNextInitStep();
        }
        super.onDescriptorWrite(gatt, descriptor, status);
    }

    @Override
    public void onCharacteristicChanged(BluetoothGatt gatt,
                                        BluetoothGattCharacteristic characteristic) {

        Log.i("BluetoothGatt 1", "BRSP characteristic change 1");

        if (_initState < _initStepCount) {
            doNextInitStep();
        } else {
            if (characteristic.getUuid().equals(BRSP_TX_UUID)) {
                Log.i("BluetoothGatt 1", "BRSP characteristic change 2");

                broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
            } else if (characteristic.getUuid().equals(BRSP_RTS_UUID)) {
                Log.i("BluetoothGatt 1", "BRSP characteristic change ");
                _lastRTS = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_SINT8, 0);
            }
        }
    }
};



  private void doNextInitStep() {
        _initState++;
        // debugLog("initState:" + _initState);
        Log.i("BluetoothGatt 1", "BRSP initstate" + _initState);
        BluetoothGattService brspService = mBluetoothGatt.getService(BRSP_SERVICE_UUID);
        if (brspService == null)
            Log.i("BluetoothGatt 1", "BRSP brsp service null");

        switch (_initState) {
            case 1:
                boolean initstateNotification = mBluetoothGatt.setCharacteristicNotification(brspService.getCharacteristic(BRSP_TX_UUID), true);
                Log.i("BluetoothGatt 1", "BRSP initstate notification" + _initState + initstateNotification);
                final BluetoothGattDescriptor TX_CCCD = brspService.getCharacteristic(BRSP_TX_UUID).getDescriptor(
                        UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
                TX_CCCD.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
                Log.d(TAG, "Device connected");
                new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        boolean initstatewrite = mBluetoothGatt.writeDescriptor(TX_CCCD);
                        Log.i("BluetoothGatt 1", "BRSP initstate write" + _initState + initstatewrite);
                    }
                }, 500);
                break;
            case 2:
                final BluetoothGattCharacteristic brspInfo = brspService.getCharacteristic(BRSP_INFO_UUID);
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        boolean initstateread = mBluetoothGatt.readCharacteristic(brspInfo);
                        Log.i("BluetoothGatt 1", "BRSP initstate read" + _initState + initstateread);
                    }
                });

                break;
            case 3:
                setBrspMode(BRSP_MODE_DATA); // Important: Make sure this is the
                // last init step
                break;
            default:
                break;
        }
        if (_initState == _initStepCount) {
            // _brspState = BRSP_STATE_READY;
            // _brspCallback.onBrspStateChanged(this);
        }
    }

1 个答案:

答案 0 :(得分:5)

发生的问题由我解决。

我看到有很多与状态8和22相关的问题,当我们连接到设备时会发生。我说这是状态8和22的确切答案,但在某些情况下,这将是理由。

这是因为当我们成功发现服务时,我们编写描述符并立即调用ondescripte覆盖方法然后读写操作。所以发生的事情是,如果没有对一个过程进行处理,可能会产生这些问题。

我找到的解决方案效果很好。总是尝试使用 Looper Handler ,这样我就可以延迟完成一次执行。

       new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                mBluetoothGatt.writeDescriptor(RTS_CCCD); //for descriptor
  //  or
    mBluetoothGatt.readCharacteristic(brspInfo); //for read
//or
    mBluetoothGatt.writeCharacteristic(brspInfo); //for write
                            }
                        }, 500);

为什么以及什么状态8问题here

为什么以及什么状态22问题here