在strain sensor APP开发过程当中,需要客户端不断地读取从蓝牙模块发送过来的数据。
遇到的问题:
连接上蓝牙模块后,能够正常读数,蓝牙数据发送速率为0.03s每个。大概在发送了342个数据之后,突然接收不到数据了。
后来查找了资料,显示原来Android中蓝牙socket通信连接时长大概为120s,如果超过这个时间没有操作,就会断开连接。但是我想了一下,客户端一直在读取数据流的呀,怎么是没有操作呢??
查了关于心跳包的内容,觉得好像有点麻烦。因为我之前的程序并没有用到service。
解决方法:然后抱着试试看的态度,从客户端每隔一段时间(只要小于120秒就好)向蓝牙模块发送不被解析的指令。结果就不会出现socket断开的情况了。(也就是说为了保持通信正常,不仅要接收数据,还要发送数据)
大致像这样:
if(framesHasRead==framesToRead){byte buffer = 0;try {mmOutStream.write(buffer);mmOutStream.flush();} catch (IOException e) {e.printStackTrace();}}
还是很开心的。不过决定今后新建一个工程的时候,改用service试试看,应该会条理清楚一点。
参考资料:http://aijiawang-126-/blog/1826087