RFCOMM_CreateConnection - уже открытое состояние: 2, состояние RFC: 4, состояние MCB: 5 - isConnected возвращает false и не может повторно подключиться - PullRequest
0 голосов
/ 25 июня 2018

У меня есть следующий код для подключения к устройству Bluetooth:

class BiSymConnectThread extends Thread {
    BluetoothDevice mDevice;

    public BiSymConnectThread(BluetoothDevice device) throws SecurityException, NoSuchMethodException {

        mDevice = device;

        UUID uuid = mDevice.getUuids()[0].getUuid();
        try {
            biSymSocket = mDevice.createInsecureRfcommSocketToServiceRecord(uuid);
        } catch (IOException e) {
            Log.e("Error", "Could not connect!");
        }
    }

    public void cancel() {
        interrupt();
        try {
            Log.i("Treadmill", "in connect thread cancellation");
            if (biSymSocket != null) {
                biSymSocket.close();
            }
        } catch (IOException localIOException) {
            Log.e("Treadmill", "exception + " + localIOException.getMessage());

        }
    }

    public void run() {
        try {

            if (biSymSocket.isConnected()) {
                biSymSocket.close();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new IOException();
                }
            }

           biSymSocket.connect();
            eventHandler.obtainMessage(MESSAGE_CONNECT_BISYM, 0, 0, "").sendToTarget();
            BluetoothConnectionService.setSocket(biSymSocket);
            BluetoothConnectionService.sendMessage(biSymSocket, "S");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                Log.e("Error", "InterruptedException: " + e.getMessage(), e);
                throw new IOException();
            }
        } catch (IOException e) {
            Log.e("Error", "IOException: " + e.getMessage(), e);
            eventHandler.obtainMessage(MESSAGE_ERRORCONNECT_BISYM, 0, 0, "").sendToTarget();
            if (biSymSocket != null) {
                try {
                    biSymSocket.close();
                } catch (IOException e1) {
                    Log.e("Error", "Can't close socket!");
                }
            }
        }
        synchronized (this) {
            biSymConnectThread = null;
        }
    }
}

Если я пытаюсь повторно подключиться к устройству, я получаю следующую ошибку: RFCOMM_CreateConnection - already opened state:2, RFC state:4, MCB state:5

Вдругой вопрос, спрашивающий об этой ошибке, кто-то упоминает метод isConnected().Однако, в моем случае, isConnected() возвращает false, а соединение все еще не установлено.

Кто-нибудь знает, в чем здесь проблема?Похоже, это какая-то неясная ошибка, так как в Интернете, похоже, об этом ничего нет.

...