如果不使用,蓝牙套接字上的输入流会挂起

时间:2016-04-07 13:14:24

标签: java android sockets bluetooth inputstream

我正在开发一款与蓝牙设备通信的Android应用。

设备不断向手机发送信息,但我选择仅在用户想要时通过按开始/停止按钮来读取数据。每次启动/停止读取服务,但连接保持打开状态。

无论按下启动/停止按钮多少次,设备的连接都能正常工作,但只有用户不会让应用程序进入“停止”状态。状态超过5秒。

如果用户让应用程序进入"停止"状态超过5秒,程序将在下一次"开始"时陷入inputstream.read()。被压了。

我已检查过套接字是否仍处于打开状态。 我知道read()是一个阻塞函数,但在这种情况下它不应该阻止,因为设备不断发送数据。

有没有人遇到过类似的问题?问题是否真的来自于几秒钟内未使用套接字的事实?

以下是我用于获取数据的代码:

public void start() {
        if (isStarted()) {
            return;
        }
        task = taskService.submit(new Runnable() {
            @Override
            public void run() {
                int value;
                channel.reset();
                try {
                    while ((value = in.read()) != -1 && !Thread.currentThread().isInterrupted()) {
                        channel.put((byte) (value & 0xFF));
                    }
                } catch (IOException e) {
                    Log.d("STRS", "IO error : " + e.getMessage(), e);
                }
            }
        });

    }

  public void stop() {
        if (!isStarted()) {
            return;
        }
        task.cancel();
    }

    public boolean isStarted() {
        return task != null && !task.isDone();
    }

0 个答案:

没有答案