diff --git a/android/src/main/java/com/pauldemarco/flutter_blue/FlutterBluePlugin.java b/android/src/main/java/com/pauldemarco/flutter_blue/FlutterBluePlugin.java index f3ffbdb9..11427137 100644 --- a/android/src/main/java/com/pauldemarco/flutter_blue/FlutterBluePlugin.java +++ b/android/src/main/java/com/pauldemarco/flutter_blue/FlutterBluePlugin.java @@ -536,7 +536,9 @@ public void onMethodCall(MethodCall call, Result result) { characteristic = locateCharacteristic(gattServer, request.getServiceUuid(), request.getSecondaryServiceUuid(), request.getCharacteristicUuid()); cccDescriptor = characteristic.getDescriptor(CCCD_ID); if(cccDescriptor == null) { - throw new Exception("could not locate CCCD descriptor for characteristic: " +characteristic.getUuid().toString()); + //Some devices - including the widely used Bluno do not actually set the CCCD_ID. + //thus setNotifications works perfectly (tested on Bluno) without cccDescriptor + log(LogLevel.INFO, "could not locate CCCD descriptor for characteristic: " +characteristic.getUuid().toString()); } } catch(Exception e) { result.error("set_notification_error", e.getMessage(), null); @@ -567,14 +569,16 @@ public void onMethodCall(MethodCall call, Result result) { return; } - if(!cccDescriptor.setValue(value)) { - result.error("set_notification_error", "error when setting the descriptor value to: " + value, null); - return; - } + if(cccDescriptor != null) { + if(!cccDescriptor.setValue(value)) { + result.error("set_notification_error", "error when setting the descriptor value to: " + value, null); + return; + } - if(!gattServer.writeDescriptor(cccDescriptor)) { - result.error("set_notification_error", "error when writing the descriptor", null); - return; + if(!gattServer.writeDescriptor(cccDescriptor)) { + result.error("set_notification_error", "error when writing the descriptor", null); + return; + } } result.success(null);