1

BluetoothGattDescriptor является NULL для этого Beacon deviceBluetoothGattDescriptor является NULL для Beacon устройства

enter image description here

здесь мой код:

BluetoothGattCharacteristic characteristic = mBluetoothGatt.getService(UUID.fromString("00001800-0000-1000-8000-00805f9b34fb")) 
          .getCharacteristic(UUID.fromString("00002a00-0000-1000-8000-00805f9b34fb")); 

     mBluetoothGatt.setCharacteristicNotification(characteristic, enabled); 
     BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")); // HERE descriptor = NULL 
     descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); 
     mBluetoothGatt.writeDescriptor(desc); 


     characteristic.setValue("newName".getBytes()); 
     mBluetoothGatt.writeCharacteristic(characteristic); 

Почему дескриптор NULL?

ответ

0

Кажется, это было потому, что некоторые устройства (шахта Samsung E5) являются поддержка BLE, но не поддерживает BluetoothGattDescriptor 0x2902 (ссылка)

, чтобы увидеть все дескрипторы, которые сторонник в вызове устройства это:

for (BluetoothGattDescriptor descriptor:characteristic.getDescriptors()){ 
        Log.e(TAG, "BluetoothGattDescriptor: "+descriptor.getUuid().toString()); 
       } 
0

В соответствии с вашим кодом он не должен быть пустым, если только у атрибута нет свойства уведомления. Вы уверены, что удаленное устройство добавило Характеристический дескриптор конфигурации клиента в его таблицу GATT для этой конкретной характеристики? Просто дважды проверьте, выполните следующие действия: Поместите точку останова, где обнаружены службы, и найдите признак в отладчике. Найти характерные свойства и посмотреть, если характерное свойство имеет следующее значение: PROPERTY_NOTIFY

Константа Значение: 16 (0x00000010)

В качестве альтернативы, бревенчатый значение свойства: characteristic.getProperties()