为了实现最简单,最有效的非阻塞方式来检测我的arduino nano(持久蓝牙客户端)和android手机(总是监听蓝牙服务器)之间的蓝牙连接的连续性,我正在使用
int bytesAvailable = InputStream.available();
定期确定InputStream上是否有任何数据。
值得一提的是,我没有通过蓝牙连接传输的重要信息。我只是每隔一秒左右对手机实施一次“ping”(实际上是数字1)。
如果'bytesAvailable'对于3个连续样本(appx 3.6秒)保持不变,那么我假设连接丢失并关闭btServerSocket和btSocket,以便客户端重新连接。尽管所有警告都说.available()是不可靠的,但它的效果非常好,并且避免了必须使用
InputStream.read();
需要很长时间(有时10秒)来实现连接已经丢失。
我遇到的问题是,在特定数量的采样周期(大约330)之后'连接丢失'部分代码启动,因为'bytesAvailable'达到三个连续采样的平台。看起来缓冲区已经填满了。我的LogCat entires证明bytesAvailable值'maxes out'。我已经将代码更改为允许100个连续值,并且bytesAvailable值永远不会超过同一个最大值。
我怎么能:
或者是否有更好的逻辑方法?