private boolean internalReadCharacteristic(@Nullable final BluetoothGattCharacteristic characteristic) {
		final BluetoothGatt gatt = bluetoothGatt;
		if (gatt == null || characteristic == null || !connected)
			return false;

		// Check characteristic property.
		final int properties = characteristic.getProperties();
		if ((properties & BluetoothGattCharacteristic.PROPERTY_READ) == 0)
			return false;

		try {
			log(Log.VERBOSE, () -> "Reading characteristic " + characteristic.getUuid());
			log(Log.DEBUG, () -> "gatt.readCharacteristic(" + characteristic.getUuid() + ")");
			return gatt.readCharacteristic(characteristic);
		} catch (final SecurityException e) {
			log(Log.ERROR, e::getLocalizedMessage);
			return false;
		}
	}
Returns the Client Characteristic Config Descriptor if the characteristic has the
required property. It may return null if the CCCD is not there.

@param characteristic   the characteristic to look the CCCD in.
@param requiredProperty the required property: {@link BluetoothGattCharacteristic#PROPERTY_NOTIFY}
                        or {@link BluetoothGattCharacteristic#PROPERTY_INDICATE}.
@return The CCC descriptor or null if characteristic is null, if it doesn't have the
required property, or if the CCCD is missing.
ble/src/main/java/no/nordicsemi/android/ble/BleManagerHandler.java