Как я могу узнать, был ли BluetoothSocket уже открыт другим приложением для моего устройства BT? (А затем закройте эту связь) - PullRequest
0 голосов
/ 22 октября 2019

У меня есть два приложения, A и B. Оба подключаются к устройству Bluetooth профиля с последовательным портом (SPP) с общим UUID 00001101-0000-1000-8000-00805f9b34fb. Если приложение A подключено к моему устройству, при вызове mSocket.connect() приложение B немедленно выдаст исключение:

java.io.IOException: read failed, socket might closed or timeout, read ret: -1

Я хочу, чтобы приложение B всегда имело приоритет при подключении к моему устройству Bluetooth.

Я пробовал метод isConnected () BluetoothSocket, но в приложении B есть другой сокет.

Я могу отключить Bluetooth, чтобы встряхнуть соединение приложения A, но это решающее время и решение.

Вот мой код. Сначала я создаю сокет

UUID SERIAL_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");

private void createSocket(){
    // Close the socket before creating a new one.
    if(mSocket != null){
        forceCloseSocket();
    }
    BluetoothSocket tmp = null;
    try {
        tmp = mDevice.createRfcommSocketToServiceRecord(SERIAL_UUID);
    } catch (IOException e) {
        Log.e(TAG, "Socket's create() method failed", e);
    }
    mSocket =  tmp;
}
}

Затем я подключаюсь к сокету.

private boolean doConnect() {
    // Start connection timeout countdown
    mCountDownTimer.start();

    try {
        // Try to connect to socket
        mSocket.connect();
        // Connection successful, get output stream
        mOutStream = mSocket.getOutputStream();
    } catch (IOException e) {
        // Connection not successful, cancel timeout countdown
        mCountDownTimer.cancel();
        return false;
    }

    mCountDownTimer.cancel();

    // Create and start read thread
    mReadThread = new BluetoothReadThread(mSocket, mCallback);
    mReadThread.start();
    return true;
}

К сожалению, приведенное выше исключение точно такое же, как когдасопряженное устройство вообще недоступно. Единственное отличие состоит в том, что когда устройство недоступно, пройдет несколько секунд, прежде чем выдать это исключение. Пока что эта задержка - единственный способ определить, подключено ли к устройству другое приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...