blue-falcon
blue-falcon copied to clipboard
Notify not working on Android
Describe the bug When calling the notifyCharacteristic, the onCharacteristicChanged never firing. I am getting a value for the read. And I have checked that the device indeed does support notifications using the LightBlue Application on IOS.
To Reproduce Steps to reproduce the behavior:
- Connect to the device using blueFalcon.connect(bluetoothPeripheral, true)
- Wait until didDiscoverServices Returns
- Search through service to find the characteristic I want to nofify4.
- Call notifyCharacteristic on the returned characteristic
char = service.characteristics.first { it.name == TESS5600_DATA_CHAR.lowercase() } bluetoothService.characteristicDelegate = this bluetoothService.notifyCharacteristic(bluetoothPeripheral, char!!, true)
Expected behavior Expecting the onCharacteristicChanged to fire
Smartphone
- Device: Samsung Tablet
- OS: Android API 31
Can you try the same thing using lightblue on Android(as you did for ios)? this rules out any reason it could be an android thing.
I would also suggest, after you request 'notify characteristic', can you then perform a single read after this, then wait to see if it updates?
For some reason light blue is crashing on this device on startup. Will see if I can fix that and test.
If I do a read after notify, then I get no read result either.
Just confirmed that when I subscribe using the light blue app the notifications are received from the peripheral.
I think the issue is here:
it.characteristic.descriptors.forEach { descriptor -> descriptor.value = descriptorValue gatt.writeDescriptor(descriptor) }
Here it is iterating through all descriptors and attempting to write an enable notification to it. But I have additional descriptor. Instead I think it should just set the notify descriptor "00002902-0000-1000-8000-00805f9b34fb"