Android-разъем Bluetooth закрыт: чтение возвращено: -1 - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь Руководство по Bluetooth от Google на Android .

И при попытке подключиться к другому устройству соединение устанавливается успешно, но сразу после того, как я начинаю слушать входящие байты, Я получаю это исключение: socket closed: read return: -1

Вот код для подключения, скопированный из руководства Google.

private inner class ConnectThread(device: BluetoothDevice) : Thread() {

private val mmSocket: BluetoothSocket? by lazy(LazyThreadSafetyMode.NONE) {
    device.createRfcommSocketToServiceRecord(MY_UUID)
}

public override fun run() {
    // Cancel discovery because it otherwise slows down the connection.
    mBluetoothAdapter?.cancelDiscovery()

    mmSocket?.use { socket ->
        // Connect to the remote device through the socket. This call blocks
        // until it succeeds or throws an exception.
        socket.connect()

        // The connection attempt succeeded. Perform work associated with
        // the connection in a separate thread.
        manageMyConnectedSocket(socket)
    }
}

// Closes the client socket and causes the thread to finish.
fun cancel() {
    try {
        mmSocket?.close()
    } catch (e: IOException) {
        Log.e(TAG, "Could not close the client socket", e)
    }
}
}

1 Ответ

0 голосов
/ 10 октября 2018

Проблема связана с кодом, размещенным в руководстве Google.

Проблема в том, что они вызывают mmSocket?.use {}, а затем продолжают подключаться через этот сокет.Метод use() является действительно полезной функцией расширения для Disposable объектов, которые выполняют над ними действия, а затем вызывают close() над ними в конце действия.

В этом случае это явно ошибка.Вы не хотите закрывать сокет сразу после установки соединения.

Чтобы все заработало, просто замените mmSocket?.use {} на mmSocket?.let {} и все будет хорошо.

Надеюсь, Google обновит их руководство.

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