蓝牙Android RFCOMM/SPP错误处理建议

jab*_*bal 5 android bluetooth rfcomm spp

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

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

首先,我不清楚是否必须担心传输的数据是否被传输.底层协议栈是否会保证我从InputStreamAndroid 读取的字节与UART在传感器端接收的字节相同?我是否必须定义我自己的受CRC或东西保护的数据包,或者它是否过度杀伤?

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

谢谢你的建议.

Den*_*ews 11

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

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