Метод BLE Gatt onCharacteristicChanged не вызывается

#android #bluetooth-lowenergy

Вопрос:

Мы столкнулись с проблемой, связанной с методом BLE Gatt, измененным по характеристикам. Этот метод не вызывается.

Мы включили уведомление, используя приведенный ниже код:

 mBluetoothGatt!!.setCharacteristicNotification("NOTIFY_SERVICE_CHARACTERISTIC", true)

val descriptor = NOTIFY_SERVICE_CHARACTERISTIC.getDescriptor(convertFromInteger(0x2902))
descriptor.value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
descriptor.value = BluetoothGattDescriptor.ENABLE_INDICATION_VALUE
var status = mBluetoothGatt!!.writeDescriptor(descriptor)
 

После этого мы отправляем код в BLE из метода onDescriptorWrite.

 {WRITE_SERVICE_CHARACTERISTIC}.setValue({BYTE_ARRAY}) 
val status = mBluetoothGatt!!.writeCharacteristic(RxChar)
 

После отправки кода в BLE. он ответит в методе onCharacteristicWrite. но мы не получаем никакого ответа в методе onCharacteristicChanged через службу уведомлений.

Те же команды работают в другом приложении сканера BLE, но в моем приложении возникла проблема.

Пожалуйста, помогите нам решить эту проблему.

Спасибо

Ответ №1:

Вы переопределяете настройки уведомлений дескриптора с помощью параметра индикации:

 descriptor.value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
descriptor.value = BluetoothGattDescriptor.ENABLE_INDICATION_VALUE
 

Вам, вероятно, нужны только уведомления, и вы можете удалить включение показаний:

 mBluetoothGatt!!.setCharacteristicNotification("NOTIFY_SERVICE_CHARACTERISTIC", true)

val descriptor = NOTIFY_SERVICE_CHARACTERISTIC.getDescriptor(convertFromInteger(0x2902))
descriptor.value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
var status = mBluetoothGatt!!.writeDescriptor(descriptor)
 

Если вам действительно нужны как уведомления, так и указания, вы должны установить следующие значения:

 descriptor.value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE | BluetoothGattDescriptor.ENABLE_INDICATION_VALUE
 

| Оператор выполняет побитовую операцию ИЛИ и поэтому объединяет оба флага в один

Комментарии:

1. Спасибо за ваш ответ, я попробовал обе настройки по одной в коде. но это решение не сработало для меня. Сначала я включил только настройки ENABLE_NOTIFICATION_VALUE и запустил приложение. После этого я включил только параметры ENABLE_INDICATION_VALUE и запустил приложение.

2. Вам нужно включить показания? Подтверждает ли характеристика показания?

3. @DeepAmin какова ценность status после того, как вы написали дескриптор

4. Я получаю статус 0 в дескрипторе записи.

5. 0 равно false, это означает, что он не является успешным