我在维持蓝牙连接(从 Android 到我正在开发的设备)超过几分钟时遇到问题。
场景是:
- 设备配对成功。
- 设备传输到 Android 的时间在 1-7 分钟之间(因设备或可能的 Android 版本而异)。
- 尽管设备仍在传输,Android 停止接收字节。
那么:为什么Android BT 停止接收?
这与 bboydflo 对此问题的回答中描述的问题/观察非常相似: Application using bluetooth SPP profile not working after update from Android 4.2 to Android 4.3
更多背景:
- 我正在使用的 BT 设备每秒一次持续发出包含约 200 个字符的测量数据包。我确定问题发生时设备端仍在传输。
- 此症状发生在我的两个 Android 设备上的应用程序中:Android 5.0.1 Acer 平板电脑和 Android 7.1.1 Moto Play X
- 我已经用一个名为 Serial Bluetooth Terminal 的应用程序进行了测试。这个应用程序没有遇到同样的问题;只要我测试过,连接就很稳定。因此,此问题可能是由我的应用程序代码中的某些内容引起的。
- 我已经看到对 Android BT 问题的各种响应,这些问题指示用户使用异步流而不是轮询接收到的字节。这似乎是一条红鲱鱼;如果您觉得在这种情况下线程模型引起了问题,请清楚地描述为什么切换到异步可以解决此问题。
我想先发制人地解决这个问题可能被关闭的原因:
- 这不是重复的。还有其他关于 BT 连接丢失的问题(即Android 上的实时蓝牙 SPP 数据流仅适用于 5 秒),但这不是同一个问题。我已经添加了一个每 1 秒传输一次的保活传出字符,我的问题仍然存在。
- 我不是在询问特定于我的应用程序的问题。SO上的至少一个其他用户遇到了这个问题。
- 我已经详细查看了 Android 蓝牙文档,但我看不出有任何明显的原因会发生这种情况。
- 我不是在征求意见。我要求客观回答为什么停止接收字节。