Я хочу установить соединение с геймпадом устройства Bluetooth, но вскоре (менее 2 секунд) устройство будет сброшено.
У меня есть 2 действия, в первом из которых я буду сканировать устройства и соединяться с ними, а затемЯ хочу установить Rfcomm
, который выдаст ошибку и остановится, я не хочу читать или отправлять какие-либо данные, потому что я использую геймпад во втором упражнении с использованием обратных вызовов по нажатию клавиши и вверх.
fun connect(device: BluetoothDevice) {
eventListener.onConnecting()
connectionThread = ConnectionThread(device)
{ isSuccess -> eventListener.onConnected(isSuccess) }
connectionThread?.start()
}
Объявление ConnectionThread
private class ConnectionThread(
private val device: BluetoothDevice,
private val onComplete: (isSuccess: Boolean) -> Unit
) : Thread() {
private var bluetoothAdapter: BluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
private var bluetoothSocket: BluetoothSocket? = null
private fun createSocket(): BluetoothSocket? {
var socket: BluetoothSocket? = null;
try {
val uuid = if (device.uuids.isNotEmpty())
device.uuids[0].uuid
else UUID.fromString(BASE_UUID);
socket = device.createRfcommSocketToServiceRecord(uuid)
} catch (e: IOException) {
e.printStackTrace()
}
return socket;
}
override fun run() {
super.run()
bluetoothAdapter.cancelDiscovery()
var isSuccess = false
try {
bluetoothSocket = createSocket()
if (bluetoothSocket != null) {
bluetoothSocket?.connect()
isSuccess = true
}
} catch (e: Exception) {
e.printStackTrace()
}
onComplete(isSuccess)
}
}
после подключения я вижу, что это обратный вызов, затем он выдает мне эту ошибку W
/System.err: java.io.IOException: read failed, socket might closed or timeout, read ret: -1
at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:900)
at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:912)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:531)
at utils.ConnectionRequest$ConnectionThread.run(ConnectionRequest.kt:69)
, а через секунду он будет дисконтировать и показыватьэти дополнения при обратном вызове.
ACTION_ACL_DISCONNECTED
Bundle[mParcelledData.dataSize=408]
android.bluetooth.device.extra.DISCONNECTION_REASON : 22
android.bluetooth.device.extra.LINKTYPE : 1