仅在连接到某些设备时,BLE的onClientConnectionState()状态= 22和状态= 19

时间:2019-06-27 18:10:53

标签: android bluetooth bluetooth-lowenergy

我正在开发一个要连接到多个BLE设备的应用程序。我需要连接两种类型的BLE设备(一种使用TI板,另一种使用Nordic板)。

问题1

在使用S5时连接北欧板时出现我的问题。基本上,在连接北欧设备后,只要我连接另一台设备,它将断开连接,日志显示:

  

onClientConnectionState()status = 22

据我所知,这意味着Android操作系统已与设备断开连接,我无能为力

我可以根据需要连接任意数量的TI板(经过测试6),之后可以连接北欧板,但是一旦连接任何其他设备,北欧板就会断开连接。

当连接了北欧板时,我尝试连接另一个北欧板都断开。

问题2

当我连接到北欧板时,它会保持连接状态(即使之前已连接过其他设备),但经过一定时间后,它也会断开连接,并在日志中显示:

  

onClientConnectionState()状态= 19

据我所读,这意味着BLE设备终止了连接

我测试了两次,连接和断开之间似乎差不多恰好是1分钟:

11:00:09.850 D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=7 device=F9:A2:E9:86:EC:82
11:01:09.730 D/BluetoothGatt: onClientConnectionState() - status=19 clientIf=7 device=F9:A2:E9:86:EC:82

11:04:20.270 D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=6 device=F9:A2:E9:86:EC:82
11:05:19.740 D/BluetoothGatt: onClientConnectionState() - status=19 clientIf=6 device=F9:A2:E9:86:EC:82

我尝试过的事情

所以我的第一个想法是让我们看看它只是我的应用还是BLE设备的问题。我使用nRF应用程序并连接到Nordic板,然后再连接到其他多个设备。很好,我观看了日志,没有断开连接,并且能够从每个设备上收听所有特征。

所以我得出的结论是我的应用程序做错了,因为可以在北欧委员会之后连接到多个设备。因此,我开始分析自己在应用程序中的工作。

我对两种设备类型的处理方式不同吗?这些设备具有不同的公告服务,我对其进行过滤。我在设备之间做的唯一不同的事情是,我所找到的服务取决于它们通过设备类型标记的服务。就是这样,我已经对此进行了多次分析,以确保不会对重要的事情进行不同的处理。

尝试找出造成这种情况的原因一段时间后,我决定尝试使用另一台设备(较低规格的Android GO手机和Doogee x20 Android 7),并且我的应用程序运行正常。先连接2个北欧板,再连接多个TI板,并且它们不会断开连接。经过多次测试,它始终如一地正常工作,没有问题。

S5偶尔会出现一个奇怪的问题,我只是通过不断尝试连接就可以正常工作,但这只发生了2次,所以我不打算等待一分钟后看北欧板是否断开连接。还未意识到这是1分钟的问题。

我刚刚在另一台S5上进行了测试,并且第一次尝试就可以使用,但此后一直没有。

因此发生这种情况的方法似乎是:

  • 三星S5(这是由于Android 5.0还是特定于我不确定的设备而定)
  • 北欧板而不是TI
  • 我的应用但不是nRF

更改以上任何内容都没有问题

编辑: 我正在用它来连接:

deviceEntry.gatt = device.connectGatt(this, false, GattCallback(this, deviceEntry))

deviceEntry只是我制作的用于将BluetoothGatt和状态保持在一起的类

1 个答案:

答案 0 :(得分:0)

通过与BLE设备通信解决了该问题。不确定为什么这是特定于Samsung S5和Nordic主板的。但是我所做的只是设置特征通知,并且不再断开连接。