Отправленные и полученные байты с блютузом не совпадают, как это сделать правильно? - PullRequest
0 голосов
/ 17 февраля 2019

Два байт-массива, один получен от Bluetooth, а другой является точной копией отправленного байт-массива, не совпадают.

У меня есть этот объект для сигналов, которые я посылаю.

object Signals {
    val ENABLE_HOTSPOT = "01".toByteArray()
    val DISABLE_HOTSPOT= "02".toByteArray()
}

Я отправляю bytearray с этой функцией в ConnectedThread

fun write(barr: ByteArray) {
    try {
        Log.d(LOG_TAG, "Writing $barr ${String(barr)}")
        outputStream.write(barr)
    } catch (e: IOException) {
        Log.e(LOG_TAG, "Exception during write()", e)
    }
}

И получаю с этим

override fun run() {
    while (true) {
        try {
            Log.d(_LOG, "Waiting to read.")
            inputStream.read(buffer)
        } catch (e: IOException) {
            Log.e(_LOG, "Input stream was disconnected.", e)
            connection_lost()
            break
        }

        Log.d(_LOG, "Read message $buffer ${String(buffer)}")
        receiver.receive(buffer)
    }
}

Функция получения это

override fun receive(byteArray: ByteArray) {
    when {
        // These never match
        byteArray.contentEquals(Signals.ENABLE_HOTSPOT) -> {
            setHotspot(true)
        }
        byteArray.contentEquals(Signals.DISABLE_HOTSPOT) -> {
            setHotspot(false)
        }
        else -> {
            Log.d(LOG_TAG, "Nothing matched .${String(byteArray)}. .${String(Signals.ENABLE_HOTSPOT)}." +
                        " .${String(Signals.ENABLE_HOTSPOT) == String(byteArray)}.")
        }
    }
}

Я пробовал сопоставитьс оператором "==", попробованным с contentEquals, я даже изменил ключевое слово when на кучу if s, но ни одно из них не сработало.Я как вошел, отправил и получил bytearray.Несмотря на то, что они различаются при печати напрямую, как "$byteArray", они одинаковы, когда превращаются в строку с String(byteArray).

Я не знаю, почему они не совпадают, есть ли способ сделать это

...