Сброс соединения BluetoothDevice по пиру - PullRequest
0 голосов
/ 23 октября 2019

У меня Raspberry Pi нулевой W, и я пытаюсь подключиться к нему с помощью Bluetooth. У меня есть «серверный» код bluetooth, написанный на kotlin.

Если я использую стороннее приложение (последовательный терминал Bluetooth), я могу легко подключиться к нему и общаться. Но если я попытаюсь повторить это в моем собственном приложении, я получу Connection reset by peer.

Телефон соединен с малиной.

Код подключения:

private class DeviceConnector : AsyncTask<Void, Void, Void>() {

    override fun doInBackground(vararg params: Void?): Void? {
        if(bluetoothSocket == null) {
            bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()

            val device : BluetoothDevice = bluetoothAdapter.getRemoteDevice(address)
            bluetoothSocket = device.createRfcommSocketToServiceRecord(UUID.randomUUID())
            bluetoothAdapter.cancelDiscovery()
            bluetoothSocket!!.connect()  //  <--- Exception happens here
        }
        return null
    }

}

Полная трассировка стека:

Process: cz.abc.def, PID: 25157
java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:330)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:255)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:776)
 Caused by: java.io.IOException: Connection reset by peer
    at android.net.LocalSocketImpl.readba_native(Native Method)
    at android.net.LocalSocketImpl.-wrap1(LocalSocketImpl.java)
    at android.net.LocalSocketImpl$SocketInputStream.read(LocalSocketImpl.java:110)
    at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:700)
    at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:714)
    at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:383)
    at cz.abc.def.ControlsActivity$DeviceConnector.doInBackground(ControlsActivity.kt:53)
    at cz.abc.def.ControlsActivity$DeviceConnector.doInBackground(ControlsActivity.kt:44)
    at android.os.AsyncTask$2.call(AsyncTask.java:316)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)

Кто-нибудь знает, в чем проблема?

EDIT Теперь он дает мне read failed, socket might closed or timeout, read ret: -1 по некоторым причинам. Я ничего не менял

    Process: cz.abc.def, PID: 32255
java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:330)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:255)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:776)
 Caused by: java.io.IOException: read failed, socket might closed or timeout, read ret: -1
    at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:702)
    at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:714)
    at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:383)
    at cz.abc.def.ControlsActivity$DeviceConnector.doInBackground(ControlsActivity.kt:60)
    at cz.abc.def.ControlsActivity$DeviceConnector.doInBackground(ControlsActivity.kt:51)
    at android.os.AsyncTask$2.call(AsyncTask.java:316)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
...