7

我计划在 Android 设备和使用商业蓝牙模块的自定义传感器之间使用通信协议。我会使用 SPP 配置文件,据说它“为用户提供简单可靠的数据流,类似于 TCP”。

我对蓝牙技术不是很熟悉,对设计这样的协议有一些疑问。

首先,我不清楚我是否必须担心损坏的数据是否被传输。底层协议栈能否保证我从InputStreamAndroid 读取的字节与 UART 在传感器端接收的字节相同?我是否必须定义我自己的受 CRC 或其他东西保护的数据包,还是会有点矫枉过正?

从 Android 蓝牙文档中我不清楚如果信号很弱并且丢失了一段时间,我的应用程序会发生什么。我IOException是立即获得,还是平台为我提供了一些隐藏的错误处理和恢复,使我看不到如此短暂的中断?

感谢您的任何建议。

4

1 回答 1

14

您不必担心 SPP 上的数据损坏,蓝牙提供 2 级 CRC,一个在基带,一个在 L2CAP 级别,两者都具有针对任何检测到的损坏的重传机制 - 因此应用程序只会接收到好的数据包。

关于第二个问题 - 是的,在您连接的 Socket 流上,如果底层蓝牙连接断开连接,您将收到 IOExceptions,Android 无法处理自动恢复 - 通常应用程序需要检测断开连接的原因并在适用时尝试重新连接。因此,如果您想从上次成功接收/发送的那一点继续进行数据交换,那么您的应用程序应该维护某种序列号和轻协议以实现恢复。另一种选择是在重新连接时简单地从数据交换的基础开始(所以这取决于您的用例)

于 2013-01-24T17:40:42.477 回答