Прерывистое подключение - не удалось подключиться: java.io.IOException: чтение не удалось, сокет может быть закрыт или истекло время ожидания, чтение ret: -1 - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть простое приложение, которое связывается с сервером Bluetooth по протоколу rfcomm. Иногда я могу просто установить соединение, но часто я запускаю приложение и получаю следующую ошибку. Я понятия не имею, с чего начать с точки зрения обнаружения того, что может быть причиной проблемы, потому что, как я уже сказал, она действительно работает время от времени.

Logcat:

D/CONNECTTHREAD: Could not connect: java.io.IOException: read failed, socket might closed or timeout, read ret: -1
D/BluetoothSocket: close() this: android.bluetooth.BluetoothSocket@351854e, channel: 6, mSocketIS: android.net.LocalSocketImpl$SocketInputStream@8a7b66f, mSocketOS: android.net.LocalSocketImpl$SocketOutputStream@1d8af7cmSocket: android.net.LocalSocket@4a2b005 impl:android.net.LocalSocketImpl@3c4a85a fd:java.io.FileDescriptor@5a34a8b, mSocketState: INIT
D/BluetoothSocket: close() this: android.bluetooth.BluetoothSocket@351854e, channel: 6, mSocketIS: android.net.LocalSocketImpl$SocketInputStream@8a7b66f, mSocketOS: android.net.LocalSocketImpl$SocketOutputStream@1d8af7cmSocket: null, mSocketState: CLOSED

Вот методы, которые я использую для подключения:

import android.bluetooth.BluetoothDevice
import android.bluetooth.BluetoothSocket
import android.util.Log

import java.io.IOException
import java.util.*


class ConnectThread(private val bTDevice: BluetoothDevice, uuid: UUID) : Thread() {

    private val bTSocket: BluetoothSocket?

    init {
        var tmp: BluetoothSocket? = null

        try {
            tmp = this.bTDevice.createRfcommSocketToServiceRecord(uuid)
        } catch (e: IOException) {
            Log.d("CONNECTTHREAD", "Could not start listening for RFCOMM")
        }

        bTSocket = tmp
    }


    // Get Bluetooth socket
    fun getSocket(uuid: UUID?): BluetoothSocket? {
        val bTSocket: BluetoothSocket?

        var tmp: BluetoothSocket? = null

        try {
            tmp = this.bTDevice.createRfcommSocketToServiceRecord(uuid)
        } catch (e: IOException) {
            Log.d("CONNECTTHREAD", "Could not start listening for RFCOMM")
        }

        bTSocket = tmp
        return bTSocket
    }


    // Connect to device
    fun connect(bTSocket: BluetoothSocket?): Boolean {

        try {
            bTSocket!!.connect()

            if (bTSocket.isConnected) {
                // deviceItem.connected = true
                Log.d("CONNECTTHREAD", "Connected")
            }

        } catch (e: IOException) {
            Log.d("CONNECTTHREAD", "Could not connect: " + e.toString())
            try {
                bTSocket!!.close()
            } catch (close: IOException) {
                Log.d("CONNECTTHREAD", "Could not close connection:" + e.toString())
            }
            return false

        }

        return true
    }


    // Cancel connection
    fun cancel(bTSocket: BluetoothSocket?): Boolean {
        try {
            bTSocket!!.close()

            if (!bTSocket.isConnected) {
                Log.d("CONNECTTHREAD", "Connection cancelled")
            }
        } catch (e: IOException) {
            return false
        }

        return true
    }

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