对于Beacon设备,BluetoothGattDescriptor为NULL

时间:2015-12-09 09:53:23

标签: android bluetooth bluetooth-lowenergy android-bluetooth beacon

对于此Beacon device

,BluetoothGattDescriptor为NULL

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?

2 个答案:

答案 0 :(得分:0)

似乎,这是因为有些设备(我的是三星E5)支持BLE但不支持BluetoothGattDescriptor 0x2902(见链接)

要查看设备中支持者的所有描述符,请调用:

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

答案 1 :(得分:0)

根据您的代码,除非特征没有通知属性,否则它不应为null。您确定远程设备是否将特性客户端配置描述符添加到其GATT表中以获取此特定特征?只需要仔细检查它,请执行以下操作:在发现服务的位置设置断点,并在调试器中查找特性。查找特征属性,并查看特征属性是否具有此值:PROPERTY_NOTIFY

  

常数值:16(0x00000010)

或者,记录属性值:characteristic.getProperties ()