0

我正在开发 nRF52840 和 Android 智能手机之间的帧交换序列。nRF52840 端已实现,我现在正在使用 Kotlin 实现 Android 应用程序。

应用程序使用“写入”发送帧,nRF52840 使用“通知”进行回复。

我首先测试了与 nRF Connect 应用程序的交换,以将帧发送到 nRF52。正如您在下面看到的,nRF52 对通知做出了很好的响应并以十六进制格式发送帧:

单击此处查看图像。

在 Android 应用程序方面,我知道如何检测通知,但我希望像在 nRF Connect 应用程序中一样,能够显示这些帧(以十六进制格式),然后能够浏览它们。

我怎样才能做到这一点?

我的 Kotlin 函数的开始:

    private fun handleNotification(characteristic: BluetoothGattCharacteristic) {
      println("Notification !")
      val newValue = characteristic.value
    }
4

2 回答 2

0

我对我的问题有第一个答案。一个解决方案可能是使用 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 会更好。

于 2020-12-22T11:26:53.890 回答
0

我的问题还有另一个答案。以下代码以十六进制格式显示通过通知发送的 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]
于 2020-12-22T13:41:33.733 回答