我有一个蓝牙套接字,我正在使用来自 GUI 的单独线程进程从中读取数据。我将 InputStream 包装在 DataInputStream 中,这样我就可以使用 aa readFully(..) 来等待指定数量的数据。我可以运行这个代码大约一个小时,然后程序锁定,当我调试它时卡在 readFully() 上。我包含在我的 GUI 线程 BroadcastReceivers 中,以便在蓝牙断开连接时通知我。BroadCastReceivers 永远不会收到通知。如果是这种情况,不确定为什么设备会停止发送数据,或者不确定蓝牙 SPP 是否被丢弃但套接字仍然打开,因此蓝牙断开连接消息永远不会发生。任何关于修复的想法,甚至是为什么或如何调试它卡住的原因都将不胜感激。
这是我的 ReadBlueTooth 课程...
public class ReadBlueToothData extends Thread {
private BluetoothSocket btSocket;
private BluetoothAdapter bta;
private DataInputStream dinput;
public ReadBlueToothData(Activity a,String mac) {
...init object...
}
public void run() {
// if socket connected otherwise stop
if (dinput==null) return;
byte[] byteArray = new byte[3];
while (!Thread.interrupted()) {
dinput.readFully(byteArray, 0, 3);
// DO something ....
}
// close out InputStream nicely
if (dinput!=null) {
try {
dinput.close();
} catch (IOException e) { }
}
if (btSocket != null) {
try {
btSocket.close();
} catch (IOException e) {}
}
}
}