Декодировать данные, полученные с устройства Bluetooth в Android Kotlin?

#android #kotlin #bluetooth #decode

#Android #котлин #bluetooth #декодировать

Вопрос:

Я настроил устройство Bluetooth, которое отправляет данные в приложение Android. Но я получаю данные в нечитаемом формате.

Данные, которые я получил от Bluetooth, представлены в формате ниже.

 ���
��
���

  

Вот мой код Android

   private val mmInStream: InputStream?
        private val mmOutStream: OutputStream?

        init {
            var tmpIn: InputStream? = null
            var tmpOut: OutputStream? = null

            // Get the input and output streams, using temp objects because
            // member streams are final
            try {
                tmpIn = mmSocket.inputStream
                tmpOut = mmSocket.outputStream
            } catch (e: IOException) {
                Log.e(TAG, ": "   e.message)
            }
            mmInStream = tmpIn
            mmOutStream = tmpOut
        }

        override fun run() {
            val buffer = ByteArray(1024) // buffer store for the stream
            var bytes = 0 // bytes returned from read()
            // Keep listening to the InputStream until an exception occurs
            while (true) {
                try {
                        bytes = mmInStream?.read(buffer) ?:0
                        val readMessage = String(buffer, 0, bytes)
                        Log.e("Arduino Message", readMessage.toString())
                        handler?.obtainMessage(MESSAGE_READ, readMessage)?.sendToTarget()
                } catch (e: IOException) {
                    handler?.obtainMessage(CONNECTING_STATUS, 0, -1)?.sendToTarget()
                    e.printStackTrace()
                    break
                }
            }
        }

  

Ответ №1:

Пожалуйста, преобразуйте полученные байты в шестнадцатеричную строку с помощью метода расширения BytesToHex и запишите его

 fun ByteArray.bytesToHexString(
    spaces: Boolean = false
): String {
    val format = if (spaces) "x " else "x"
    val sb = StringBuilder()
    for (i in 0 until size) {
        sb.append(format.format(this[i]))
    }
    return sb.toString()
}
  

Комментарии:

1. здравствуйте, теперь я получаю шестнадцатеричную строку, но как я могу получить из нее читаемые (фактические данные)?

2. Прочитайте спецификации устройства. Там может быть информация о расшифровке ответа