我正在开发一款与蓝牙设备通信的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();
}