Устройство Bluetooth будет отключено в ближайшее время - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу установить соединение с геймпадом устройства 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
...