我正在使用BLE设备。 -我可以使用BluetoothGATT将此设备与应用程序连接 -与BluetoothGatt建立连接后,我能够首次读取所有服务,特征和广告商数据。 -我们有两个特征,一个是我们需要阅读的,另一个是写作,我能够写作。
但是写入后我无法读取特征的问题。 根据我的理解
@Override
public void onCharacteristicChanged(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic)
或
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
int status)
应该自动调用,这些是
的Callback方法我的特征写代码是
boolean status = mBluetoothGatt.setCharacteristicNotification(characteristic, state);
我还通过以下代码启用通知
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
写作后,我在阅读特性部分卡住了
任何帮助,谢谢,亲爱的提前,我在这一点上停留了3天。
答案 0 :(得分:2)
onCharacteristicRead()和onCharacteristicChanged()不会自动自动调用。
调用character.getValue()时会触发onCharacteristicRead。 像这样:
BluetoothGattCharacteristic charac = ... ;
byte[] messageBytes = charac.getValue();
charac 包含要尝试读取的特征,而 messageBytes 保留从特征读取的值。
启用通知后,将调用onCharacteristicChanged。似乎您没有完全启用通知。
public static String CLIENT_CONFIGURATION_DESCRIPTOR_STRING = "00002902-0000-1000-8000-00805f9b34fb";
...
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
UUID.fromString(CLIENT_CONFIGURATION_DESCRIPTOR_STRING));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothgatt.writeDescriptor(descriptor);
您需要添加writeDescriptor调用才能成功启用通知。