Как обрабатывать уведомления BLE на Android?

Я разрабатываю последовательность обмена кадрами между nRF52840 и Android-смартфоном. Сторона nRF52840 реализована, и сейчас я реализую приложение для Android с помощью Kotlin.

Приложение использует «запись» для отправки кадров, а nRF52840 использует «уведомления» для ответа.

Сначала я протестировал обмен с приложением nRF Connect для отправки кадров на nRF52. Как вы можете видеть ниже, nRF52 хорошо отвечает на уведомления и отправляет кадры в шестнадцатеричном формате:

Нажмите здесь, чтобы увидеть изображение.

На стороне приложения Android я знаю, как обнаруживать уведомления, но я хотел бы, как и в приложении nRF Connect, иметь возможность отображать эти кадры (в шестнадцатеричном формате), а затем иметь возможность их просматривать.

Как мне это сделать?

Начало моей функции Kotlin:

    private fun handleNotification(characteristic: BluetoothGattCharacteristic) {
      println("Notification !")
      val newValue = characteristic.value
    }
0
0
299
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У меня есть первый ответ на мой вопрос. Решением может быть использование функции getIntValue следующим образом:

private fun handleNotification(characteristic: BluetoothGattCharacteristic) {
  println("Notification !")
  val newValue = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8,0)
  println("value : $newValue")
  val newValue2 = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8,1)
  println("value : $newValue2")
}

Но было бы лучше, если бы у меня был ByteArray, вызвав функцию один раз.

Ответ принят как подходящий

У меня есть другой ответ на мой вопрос. Следующий код отображает все содержимое ByteArray, отправленного через уведомление, в шестнадцатеричном формате:

private fun handleNotification(characteristic: BluetoothGattCharacteristic) {
    println("Notification !")
    val data: ByteArray? = characteristic.value
    if (data?.isNotEmpty() == true) {
        val hexString: String = data.joinToString(separator = " ", prefix = "[",  postfix = "]") {
            String.format("0x%02X", it)
        }
        println(hexString)
    } else {
        println("Data is empty")
    }
}

Выход :

I/System.out: [0x00 0x05 0x00 0x01 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00]

Другие вопросы по теме