gpt4 book ai didi

android - 未通知多个 BluetoothGattCharacteristic

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:59 28 4
gpt4 key购买 nike

我正在使用 BLE 设备,但无法调用 onCharacteristicChanged。我有 8 个 BluetoothGattCharacteristic 需要订阅。

在我找到设备 onServicesDiscovered 后,我启动了一个流程来订阅每个特性。

private fun requestCharacteristics(gatt: BluetoothGatt, char: BluetoothGattCharacteristic){
subscribeToCharacteristic(gatt, char, true)
(charList).getOrNull(0)?.let {
charList.removeAt(0)
}
}

然后在 subscribeToCharacteristic 中,我会检查描述符。

private val CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")

private fun subscribeToCharacteristic(gatt: BluetoothGatt, char: BluetoothGattCharacteristic, enable: Boolean) {
if (gatt.setCharacteristicNotification(char, enable)){
val descriptor = char.getDescriptor(CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID)
if (descriptor != null){
if (BluetoothGattCharacteristic.PROPERTY_NOTIFY != 0 && char.properties != 0) {
descriptor.value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
} else if (BluetoothGattCharacteristic.PROPERTY_INDICATE != 0 && char.properties != 0) {
descriptor.value = BluetoothGattDescriptor.ENABLE_INDICATION_VALUE
} else {
println("The characteristic does not have NOTIFY or INDICATE property set")

}
if (gatt.writeDescriptor(descriptor)){
println("this worked")
} else {
println("This did not work")
}
} else {
println("Failed to set client characteristic notification")
}
} else {
println("Failed to register notification")
}

}

然后,我在 onDescriptorWrite 中收到针对每个特征的调用,并检查我是否需要订阅另一个特征。

override fun onDescriptorWrite(gatt: BluetoothGatt, descriptor: BluetoothGattDescriptor?, status: Int) {
super.onDescriptorWrite(gatt, descriptor, status)
if (signalsChars.isNotEmpty()) {
requestCharacteristics(gatt, signalsChars.first())
}
}

所有这些都有效,但我从未收到来自 onCharacteristicChanged 的任何调用。此外,如果我在订阅之前调用 gatt.readCharacteristic(char),则不会调用 onDescriptorWrite。同样,我有 8 个特征需要订阅。请帮忙!

最佳答案

我最近在 Kotlin 中制作了一个简单的 BLE Client Android 应用程序。你可以找到它的代码 here .也许它会对你有所帮助。

在我订阅了 gatt.setCharacteristicNotification 之后,每次特征发生变化时我都会收到通知,所以我认为你做对了。您确定 BLE 设备上的特性发生了变化吗?

此外,如果您遇到在订阅之前读取特征的情况,您可以使用 onCharacteristicRead 方法。它在读取特性时被调用,因此您可以获取描述符并在那里写入它。

关于android - 未通知多个 BluetoothGattCharacteristic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52011859/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com