Почему setCharacteristicNotification () фактически не включает уведомления?

BluetoothLeGatt Пример Android BLE содержит следующий код:

public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic,
                                          boolean enabled) {
    if (mBluetoothAdapter == null || mBluetoothGatt == null) {
        Log.w(TAG, "BluetoothAdapter not initialized");
        return;
    }
    mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);

    // This is specific to Heart Rate Measurement.
    if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) {
        BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
                UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
        descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
        mBluetoothGatt.writeDescriptor(descriptor);
    }
}

Мой вопрос в основном, почему маркированный код относится к измерению сердечного ритма? Кажется, что наличие характеристики дескриптора конфигурации характеристики клиента (CCCD) является стандартным способом управления уведомлением о характеристике, так почему бы и нетsetCharacteristicNotification() позаботиться о том, чтобы написать ему? И поскольку он этого не делает, что делаетsetCharacteristicNotification() на самом деле делать?

Я довольно новичок в BLE, и в интернете нет объяснений, которые не предполагают, что вы уже все поняли! Так что не думайте, что я знаю, что такое CCCD или что-то еще! Было довольно сложно выяснить, что такое CCCD!

Изменить: см. Также этот ответ, который поддерживает мое понимание CCCD (и заставляет меня продолжать задаваться вопросом, почему вы должны писать им вручную в Android, когда есть функция, котораявыглядит вроде бы так и надо сделать)https://devzone.nordicsemi.com/index.php/what-does-cccd-mean

Ответы на вопрос(5)

Ваш ответ на вопрос