发送和接收的字节数组与蓝牙不匹配,如何正确执行?

时间:2019-02-16 22:35:28

标签: android arrays kotlin bluetooth android-bluetooth

两个字节数组,一个是从蓝牙接收的,另一个是发送的字节数组的精确副本不匹配。

我有这个对象用于发送信号。

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

我正在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,但是它们都不起作用。我都记录了发送和接收的字节数组。尽管直接像"$byteArray"一样打印时它们是不同的,但是用String(byteArray)上移为字符串时它们是相同的。

我不知道为什么这些不匹配,有办法吗?

0 个答案:

没有答案