DataInputStream停留在readFully上

时间:2011-09-30 20:51:37

标签: android bluetooth datainputstream

我有一个我正在读取数据的BluetoothSocket,使用来自GUI的单独Thread程序。我将InputStream包装在DataInputStream中,这样我就可以使用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) {}
        }
    }
}

1 个答案:

答案 0 :(得分:1)

在检测到蓝牙断开连接时,我不会再这样做了。

dinput.close();
readBlueToothData().interrupt();
btSocket.close();
//make sure to check for nulls for all these too

然后通过查看进入的数据进行检查,如果缓冲区的大小没有增加,那么也可以调用disconnect。