Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android DataInputStream已完全打开_Android_Bluetooth_Datainputstream - Fatal编程技术网

Android DataInputStream已完全打开

Android DataInputStream已完全打开,android,bluetooth,datainputstream,Android,Bluetooth,Datainputstream,我有一个BluetoothSocket,我正在从中读取数据,使用一个独立于GUI的线程进程。我将InputStream包装在DataInputStream中,这样我就可以使用readFully(..)来等待指定数量的数据。我可以运行这段代码大约一个小时,然后程序锁定,当我调试它时,它卡在readFully()上。我在GUI线程中包含了一个接收器,当蓝牙断开连接时通知我。广播接收者从未得到通知。不确定设备为什么会停止发送数据(如果是这种情况),或者不确定蓝牙SPP是否已断开,但插座仍处于打开状态,

我有一个BluetoothSocket,我正在从中读取数据,使用一个独立于GUI的线程进程。我将InputStream包装在DataInputStream中,这样我就可以使用readFully(..)来等待指定数量的数据。我可以运行这段代码大约一个小时,然后程序锁定,当我调试它时,它卡在readFully()上。我在GUI线程中包含了一个接收器,当蓝牙断开连接时通知我。广播接收者从未得到通知。不确定设备为什么会停止发送数据(如果是这种情况),或者不确定蓝牙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) {}
        }
    }
}

当检测到蓝牙断开连接时,通过优雅地执行此操作,我不再出现此错误

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

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

有时仍会点击此按钮……希望有人会收到并回答。