Android蓝牙InputStream.available()缓冲区

时间:2015-08-12 22:49:54

标签: android bluetooth inputstream

为了实现最简单,最有效的非阻塞方式来检测我的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值永远不会超过同一个最大值。

我怎么能:

  • 为.available()设置较大的缓冲区大小,而无需使用.read()
  • 或flush()InputStream允许它再次从零开始

或者是否有更好的逻辑方法?

0 个答案:

没有答案