- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 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/
我正在使用 BLE 设备,但无法调用 onCharacteristicChanged。我有 8 个 BluetoothGattCharacteristic 需要订阅。 在我找到设备 onService
我正在尝试读取存储在 BluetoothGattCharacteristic 中的值。以下是我的 BluetoothGattCallback 代码,其中发生了大部分操作: private final
我想知道如果我有 UUID 并已成功连接到 BLE 设备,检索 BluetoothGattCharacteristic 的最佳方法是什么?例如,见下文。 TIA。 public BluetoothGa
我在 Android 蓝牙 LE 上遇到了一些奇怪的行为(使用三星的 Android 4.4.2 设备和谷歌的 4.4.4 设备)。 连接到低功耗蓝牙设备后,发现服务然后读取特征,在回调事件中,代码
我是一名优秀的程序员,十分优秀!