@@ -689,6 +689,7 @@ public void monitorCharacteristicForDevice(String deviceIdentifier,
689689 String serviceUUID ,
690690 String characteristicUUID ,
691691 String transactionId ,
692+ String subscriptionType ,
692693 OnEventCallback <Characteristic > onEventCallback ,
693694 OnErrorCallback onErrorCallback ) {
694695 final Characteristic characteristic = getCharacteristicOrEmitError (
@@ -697,13 +698,14 @@ public void monitorCharacteristicForDevice(String deviceIdentifier,
697698 return ;
698699 }
699700
700- safeMonitorCharacteristicForDevice (characteristic , transactionId , onEventCallback , onErrorCallback );
701+ safeMonitorCharacteristicForDevice (characteristic , transactionId , subscriptionType , onEventCallback , onErrorCallback );
701702 }
702703
703704 @ Override
704705 public void monitorCharacteristicForService (int serviceIdentifier ,
705706 String characteristicUUID ,
706707 String transactionId ,
708+ String subscriptionType ,
707709 OnEventCallback <Characteristic > onEventCallback ,
708710 OnErrorCallback onErrorCallback ) {
709711 final Characteristic characteristic = getCharacteristicOrEmitError (
@@ -712,19 +714,19 @@ public void monitorCharacteristicForService(int serviceIdentifier,
712714 return ;
713715 }
714716
715- safeMonitorCharacteristicForDevice (characteristic , transactionId , onEventCallback , onErrorCallback );
717+ safeMonitorCharacteristicForDevice (characteristic , transactionId , subscriptionType , onEventCallback , onErrorCallback );
716718 }
717719
718720 @ Override
719- public void monitorCharacteristic (int characteristicIdentifier , String transactionId ,
721+ public void monitorCharacteristic (int characteristicIdentifier , String transactionId , String subscriptionType ,
720722 OnEventCallback <Characteristic > onEventCallback ,
721723 OnErrorCallback onErrorCallback ) {
722724 final Characteristic characteristic = getCharacteristicOrEmitError (characteristicIdentifier , onErrorCallback );
723725 if (characteristic == null ) {
724726 return ;
725727 }
726728
727- safeMonitorCharacteristicForDevice (characteristic , transactionId , onEventCallback , onErrorCallback );
729+ safeMonitorCharacteristicForDevice (characteristic , transactionId , subscriptionType , onEventCallback , onErrorCallback );
728730 }
729731
730732 @ Override
@@ -1439,6 +1441,7 @@ private void safeWriteCharacteristicForDevice(final Characteristic characteristi
14391441
14401442 private void safeMonitorCharacteristicForDevice (final Characteristic characteristic ,
14411443 final String transactionId ,
1444+ final String subscriptionType ,
14421445 final OnEventCallback <Characteristic > onEventCallback ,
14431446 final OnErrorCallback onErrorCallback ) {
14441447 final RxBleConnection connection = getConnectionOrEmitError (characteristic .getDeviceId (), onErrorCallback );
@@ -1453,12 +1456,15 @@ private void safeMonitorCharacteristicForDevice(final Characteristic characteris
14531456 NotificationSetupMode setupMode = cccDescriptor != null
14541457 ? NotificationSetupMode .QUICK_SETUP
14551458 : NotificationSetupMode .COMPAT ;
1456- if (characteristic .isNotifiable ()) {
1457- return connection .setupNotification (characteristic .gattCharacteristic , setupMode );
1458- }
1459-
1460- if (characteristic .isIndicatable ()) {
1461- return connection .setupIndication (characteristic .gattCharacteristic , setupMode );
1459+
1460+ if ("notification" .equals (subscriptionType ) && characteristic .isNotifiable ()) {
1461+ return connection .setupNotification (characteristic .gattCharacteristic , setupMode );
1462+ } else if ("indication" .equals (subscriptionType ) && characteristic .isIndicatable ()) {
1463+ return connection .setupIndication (characteristic .gattCharacteristic , setupMode );
1464+ } else if (characteristic .isNotifiable ()) {
1465+ return connection .setupNotification (characteristic .gattCharacteristic , setupMode );
1466+ } else if (characteristic .isIndicatable ()) {
1467+ return connection .setupIndication (characteristic .gattCharacteristic , setupMode );
14621468 }
14631469
14641470 return Observable .error (new CannotMonitorCharacteristicException (characteristic ));
0 commit comments