#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, это означает, что он не является успешным