这是我的代码:
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 :(得分: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 ()