Android BLE 读取特性,当我读取数据(大)时,我只得到最后一部分。不是完整的数据。我该怎么做才能获得完整数据

Android BLE Read characteristic, When I read data(large) I get the last part only. Not the complete data. What can I do to get the full data

我正在以 20 字节块的形式向 BLE 设备发送数据。
我收到了很大的回应。 但是onCharacteristicRead回调,我只得到最后一条数据。

byte[] messageBytes = characteristic.getValue();

if (messageBytes != null && messageBytes.length > 0) {
  for(byte byteChar : messageBytes) {
     stringBuilder.append((char)byteChar);
  }
}

Characteristic 的值在您每次写入时都会更新,这就是为什么当您读取时,它只反映最新值(您写入的最后一个值)。

要连续读取数据,需要先开启特征通知。

    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 一次只能处理 1 个操作,如果在前一个操作未完成时执行另一个操作,它不会放入队列,但会 return false。