java - 当我的数据包含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
。请指教。谢谢
解决方案
BLE 堆栈根本不分析数据。
必须是在远程设备上运行的应用程序在发送之前将数据分成两部分。
推荐阅读
- google-bigquery - 使用 partitiontime 创建 google storage bigquery 表
- python - 如何自动获取 matplotlib 中第一个和最后一个轴标签的“好”值?
- windows - 设置 MongoDB shell 时无法在动态链接库中找到过程入口点 BCryptHash
- html - 如何在Angular中的每个页面中包含导航栏
- amazon-web-services - Cloudfront x-cache:来自 cloudfront,但 x-amzn-remapped-date 是较旧的日期。这是什么意思?
- reactjs - React 问题中的动态类名
- cmake - 如何在 cmake 项目中使用 allegro5?
- python - 列出理解并将参数转换为其他东西不是我的事
- html - 什么是媒体类型 (AKA MIME) 模板?
- python - 当前路径 {% url 'post_new' %) 与其中任何一个都不匹配