我正在尝试让Xamarin应用程序通过蓝牙从我们的自定义PCB接收大约10 kbps的SPP数据。 PCB上的BC127模块可以发送的最大数据包大小为255个字节,因此应用程序需要每隔25ms接收一个数据包。我正在使用数据包来分离数据,因此需要一次接收一个。
测试应用程序一直在尝试接收数据,但是有时在接收方法开始时返回数据时,接收流中有2个以上的数据包在等待。我的问题是,什么导致蓝牙接收方法的巨大延迟?我已经附上了下面的方法。连接到蓝牙模块后,该应用程序仅执行一会儿,而仅在while(true)循环中运行此方法。
public byte[] ReadBluetoothPacket()
{
int bytesAvailable = 0;
while (bytesAvailable == 0) // Wait for packet to arrive
{
bytesAvailable = stream.BaseInputStream.Available(); // Find out how big the packet is
}
byte[] result = new byte[bytesAvailable];
_socket.InputStream.Read(result, 0, bytesAvailable); // Add the bytes to the buffer
return result;
}
最佳答案
我认为问题是由于Android OS执行后台任务而导致我的接收线程受阻。由于原来只是一个间歇性问题,因此重写数据接收器以立即处理多个数据包即可解决该问题。