Два байт-массива, один получен от 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)
.
Я не знаю, почему они не совпадают, есть ли способ сделать это