我可以使用SPP同时连接到基于Android的手机中的两个设备,但是一旦打开输入流(如socket.getInputStream()),其中一个将在流中返回0,即没有数据可用在流上。 例如,线程A(thA)和线程B(thB)分别连接到设备A(devA)和设备B(devB)。因此,thA使用输入流A(inA)从devA接收数据,thB使用输入流B(inB)从devB接收数据。如下: devA ---> inA ---> thA devB ---> inB ---> thB 如果我单独连接到每个设备,它工作正常。但是,在同时连接两个设备的情况下,只有inA或inB上有数据。
如果发生在你身上,请与我分享你的经历,我将非常感激! 先感谢您。 YT
答案 0 :(得分:0)
而不是
try {mBTSocket = mBTDevice.createRfcommSocketToServiceRecord(UUID_RFCOMM_GENERIC);
} catch (Exception e1) {
msg ("connect(): Failed to bind to RFCOMM by UUID. msg=" + e1.getMessage());
return false;
}
反思很容易成为问题的根源。如果没有理由使用它,那么不惜一切代价避免它。
此外,如果getClass调用失败,那么你的“m”变量将为null,并且你没有陷入这种情况。您应该更多地概括您的异常,而不是使用特定的异常,只需使用“异常”,就像我上面的代码片段一样。它比为可能引发的每种可能类型的异常添加一个catch更容易。
我对你在处理程序方面所做的事情感到困惑,这对我来说没有意义。您可以删除处理程序代码以简化操作吗?
太复杂了。删除所有的反射,额外的捕获。
将您的方法设为一页或更少,这是一种很好的编码习惯。当一个方法不仅仅是一个页面时,它太复杂了,它使得阅读它并且调试它非常困难。通过创建执行常见任务的其他方法来减小方法的大小。
将connect()逻辑与I / O逻辑分开。你应该有一个发送数据的方法,一个接收数据的方法,一个connect()的方法。然后,一旦你得到那些工作,chunk up并创建更高级别的I / O方法,用于发送和接收整个数据块。然后完善这些方法并不断成长。
在我的代码中,read,write,connect和ALL I / O方法每个只有1-20行。保持它们非常简单,因为您的I / O逻辑是应用程序的核心,它需要干净整洁。