У меня 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)