问题描述
我在Android手机上使用BLE应用程序与自定义BLE传感器板通信。 电路板提供两个特性,加速和心电图。 在电话方面,我想从传感器板接收两个特征的通知。 我设置通知的代码:
mGatt.setCharacteristicNotification(ecgChar, true);
BluetoothGattDescriptor descriptor = ecgChar.getDescriptor(
UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mGatt.writeDescriptor(descriptor);
mGatt.setCharacteristicNotification(accelChar, true);
descriptor = ecgChar.getDescriptor(
UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mGatt.writeDescriptor(descriptor);
但是,我只能收到第一个特征的通知。 当我只注册一个特征的通知时,它运作良好。 ECG和加速度的采样频率均为100Hz。 那么如何从这两个特征中接收通知? 谢谢。
1楼
您一次只能有一个未完成的gatt操作。 在这种情况下,您在等到第一个完成之前执行两次writeDescriptor调用。 您必须等待直到您可以发送下一个。
2楼
我同意埃米尔的回答。 当你有第一个特征的写描述符时:
boolen isSucsess = mGatt.writeDescriptor(descriptor);
你应该等待回调这个第一个特征来自:
onDescriptorWrite(BluetoothGatt gatt,BluetoothGattDescriptor描述符,int状态) - BluetoothGattCallback的方法。
只有在那之后你才应该去下一个特征及其描述符处理。
例如,您可以扩展BluetoothGattDescriptor并在方法中运行下一个特性及其描述符处理
onDescriptorWrite(...){... here ...}。
同时请注意,有时您应该为所有特征设置通知,然后写入其描述符。 我在体重秤设备的练习中遇到了这个问题。 为了获得重量,我需要为电池,时间,重量设置通知,然后为所有特征写入描述符(等待每个人的回调))。
对于清晰的代码,您最好使用多重编写。
最好的,StaSer。