为什么 Android 蓝牙会在几分钟后停止接收字节?

Why does Android Bluetooth stop receiving bytes after a few minutes?

我无法维持蓝牙连接(从 Android 到我正在开发的设备)超过几分钟。

场景是:

  1. 设备配对成功。
  2. 设备向 Android 传输 1-7 分钟(因设备或可能 Android 版本而异)。
  3. Android 尽管设备仍在传输,但已停止接收字节。

所以:为什么AndroidBT停止接收?

非常类似于bboydflo对这个问题的回答中描述的issue/observation: Application using bluetooth SPP profile not working after update from Android 4.2 to Android 4.3

更多背景:

我想先说明一下这个问题可能被关闭的原因:

好的,我对这个有部分答案。首先,更多背景知识:

  • 我是 运行 BT 流轮询线程,该线程每 2 秒执行一次可运行
  • 用于读取流的缓冲区长度为 1024 个元素

我怀疑这可能是 space 中的某个后台缓冲区 运行。因此,我将 2s 更改为 500ms,将 1024 长度更改为 10024。现在,我已经进行了大约 20 分钟的连接,没有任何问题(而且还在继续)。

如果能找到确凿的证据就好了。我最初认为 stream.Available() 足以判断缓冲区是否已满,但在这种情况下,当 Android 设备停止接收时,stream.Available() 实际上返回 0 .所以我不太确定要检查哪个队列来证明这个问题与缓冲区已满有关。