#android #kotlin #bluetooth-lowenergy #nrf52
#Android #kotlin #bluetooth -низкое энергопотребление #nrf52
Вопрос:
Я разрабатываю последовательность обмена кадрами между 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
}
Ответ №1:
У меня есть первый ответ на мой вопрос. Решением может быть использование функции 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, вызвав функцию один раз.
Ответ №2:
У меня есть другой ответ на мой вопрос. Следующий код отображает все содержимое байтового массива, отправленного через уведомление, в шестнадцатеричном формате:
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("0xX", 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]