Значение
Characteristi c обновляется каждый раз, когда вы пишете в него, поэтому при чтении оно отражает только последнее значение (последнее, которое вы записали).
Для непрерывного чтения данных вы должен сначала включить уведомление о характеристиках.
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID_DESCRIPTOR);
descriptor.setValue(enabled?BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
:BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor);
Затем вы можете начать запись данных
byte[] data = <Your data here>;
BluetoothGattService Service = mBluetoothGatt.getService(UUID_TARGET_SERVICE);
BluetoothGattCharacteristic charac = Service
.getCharacteristic(UUID_TARGET_CHARACTERISTIC);
charac.setValue(data);
mBluetoothGatt.writeCharacteristic(charac);
Теперь каждый раз, когда вы пишете, клиентская сторона будет получать обратный вызов onCharactersticChanged
, который содержит недавно обновленное значение (data
). На самом деле вам не нужно вызывать операцию чтения.
Помните, что mBluetoothGatt может обрабатывать только одну операцию за раз, если вы выполняете другую, пока предыдущая не завершена, она не будет помещена в очередь, но вернет false.