我在维护蓝牙连接(从Android到我正在开发的设备(长达几分钟以上很难。
场景是:
- 设备成功配对。
- 设备将1-7分钟之间传输到Android(通过设备或可能的Android版本而变化(。
- Android停止接收字节,尽管设备仍在发送。
so:为什么Android BT停止接收?
这是非常,类似于Bboydflo在此问题的回答中所述的问题/观察。使用Bluetooth SPP配置文件的应用程序在更新Android 4.2更新到Android 4.3
之后不起作用更多背景:
- 我正在使用的BT设备不断发射包含约200个字符的测量数据包,每秒一次。我敢肯定,当问题发生时,设备侧仍在发送。
- 此研讨会发生在我的应用程序上的两个Android设备上发生:Android 5.0.1 Acer平板电脑和Android 7.1.1 Moto Play X
- 我已经使用一个名为串行蓝牙终端的应用程序进行了测试。该应用程序不是经历同一问题;只要我测试,连接稳定。因此,此问题可能是由我的应用程序代码中的某些内容引起的。
- 我已经看到了对Android BT问题的各种回答,指示用户使用异步流,而不是对接收的字节进行轮询。这似乎是红鲱鱼。如果您觉得线程模型在这种情况下引起了概率,请清楚地描述为什么切换到异步会解决此问题。
我想预先解决这个问题可能关闭的原因:
- 这不是重复。关于BT连接掉落的问题还有其他问题(即Android上的实时蓝牙SPP数据流仅工作5秒(,但这不是同一问题。我已经添加了每1次传输的野生式外向炭,我的问题仍然存在。
- 我不是在询问我申请的特定问题;至少有一个用户遇到了这个问题。
- 我已经详细介绍了Android蓝牙文档,我看不到发生这种情况的任何明显原因。
- 我不是要意见;我要求提供一个客观的答案,说明为什么要停止接收字节。
好吧,我对此有部分答案。首先,更多背景:
- 我在一个线程上运行BT流进行轮询,该线程每2s 执行可运行的线索
- 用于读取流的缓冲区是1024个元素长
我怀疑这可能是一些背景缓冲区,这些缓冲区耗尽了空间。因此,我将2s更改为500ms,将1024的长度更改为10024。现在,我有大约20分钟的连接而没有任何麻烦(并且仍然前进(。
为此找到吸烟枪真是太好了。我最初认为stream.available((足以分辨出缓冲区是否被填充,但是在这种情况下,当Android设备停止接收时,stream.available((实际上是返回0。因此,我不确定要检查哪个队列可以证明此问题与缓冲区的填充有关。