我正在开发一个要连接到多个BLE设备的应用程序。我需要连接两种类型的BLE设备(一种使用TI板,另一种使用Nordic板)。
在使用S5时连接北欧板时出现我的问题。基本上,在连接北欧设备后,只要我连接另一台设备,它将断开连接,日志显示:
onClientConnectionState()status = 22
据我所知,这意味着Android操作系统已与设备断开连接,我无能为力
我可以根据需要连接任意数量的TI板(经过测试6),之后可以连接北欧板,但是一旦连接任何其他设备,北欧板就会断开连接。
当连接了北欧板时,我尝试连接另一个北欧板都断开。
当我连接到北欧板时,它会保持连接状态(即使之前已连接过其他设备),但经过一定时间后,它也会断开连接,并在日志中显示:
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上进行了测试,并且第一次尝试就可以使用,但此后一直没有。
因此发生这种情况的方法似乎是:
更改以上任何内容都没有问题
编辑: 我正在用它来连接:
deviceEntry.gatt = device.connectGatt(this, false, GattCallback(this, deviceEntry))
deviceEntry只是我制作的用于将BluetoothGatt和状态保持在一起的类
答案 0 :(得分:0)
通过与BLE设备通信解决了该问题。不确定为什么这是特定于Samsung S5和Nordic主板的。但是我所做的只是设置特征通知,并且不再断开连接。