2013-01-24 71 views
5

我正计划在Android设备和使用商用蓝牙模块的自定义传感器之间使用的通信协议。我将使用SPP配置文件,它被称为“向用户提供简单可靠的数据流,类似于TCP”。蓝牙Android RFCOMM/SPP错误处理建议

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

首先,我不清楚我是否必须担心被传输的数据是否被损坏。基础协议堆栈会保证我从Android提供的InputStream读取的字节与UART在传感器端收到的字节相同吗?我是否必须定义自己的受CRC或其他东西保护的数据包,还是会过度杀伤?

从Android蓝牙文档中我不清楚我的应用程序中发生了什么,如果信号很弱并且暂时丢失了。我是否一次得到IOException,或者该平台为我提供了一些隐藏的错误处理和恢复功能,可以让我看不到这种短暂的中断?

感谢您的任何建议。

回答

10

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

关于第二个问题 - 如果基础蓝牙连接断开,Android连接器无法处理自动恢复 - 通常应用程序需要检测断开连接的原因并尝试重新连接,根据情况连接。 所以如果你想从上次成功接收/发送的点开始继续数据交换,那么应用程序应该保持某种顺序号和轻协议来实现简历。 另一种选择是简单地从重新连接时的数据交换开始(所以这取决于你的用例)

+0

非常感谢你,这个答案非常明确,涵盖了所有我想知道的。 – jabal

+0

不客气 –