首页 > 解决方案 > 当我的数据包含0x0a和0x0d时,如何从android中的BLE读取全长数据?

问题描述

我能够正确连接到设备并且它可以正确接收特征而没有任何错误。但是当接收到的数据包含 0x0a 和 0x0d 时就会出错。

例如,设备将数据作为0b710a6000179c21346fb23feec651bc发送到移动应用程序。该应用程序将收到如下消息。该应用程序将数据拆分为 2 个数据。

D/BluetoothLeService:接收数据 = 0B71

D/BluetoothLeService:接收数据 = 6000179C21346FB23FEEC651BC

这是来自函数broadcastUpdate的日志消息

private void broadcastUpdate(final String action,
                             final BluetoothGattCharacteristic characteristic) {
    final Intent intent = new Intent(action);

    if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) {
        ...
    } else {
        // For all other profiles, writes the data formatted in HEX.
        final byte[] data = characteristic.getValue();
        if (data != null && data.length > 0) {
            String hexData=DeviceControlActivity.bytesToHex(data);
            Log.d(TAG, "Receive Data = "+hexData);
            intent.putExtra(EXTRA_DATA, data);
        }
    }
    sendBroadcast(intent);
}

我尝试使用 nRF Connect 应用程序来测试 BLE 写入/读取,但它也得到与上面相同的输出。然后我发现 0x0A 是换行符\n, 0x0D 是返回字符\r

0x0A当它包含和时,有什么方法可以接收全长数据0x0D?所以应用程序可以接收完整的数据0B710A6000179C21346FB23FEEC651BC。请指教。谢谢

标签: javaandroidbluetooth-lowenergyandroid-bluetooth

解决方案


BLE 堆栈根本不分析数据。

必须是在远程设备上运行的应用程序在发送之前将数据分成两部分。


推荐阅读