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

Android BLE onClientConnectionState()仅在连接到某些设备时状态=22和状态=19,android,bluetooth,bluetooth-lowenergy,Android,Bluetooth,Bluetooth Lowenergy,我正在开发一个应用程序,在这个应用程序中,我想连接到多个BLE设备。我有两种需要连接的BLE设备(一种使用TI板,另一种使用Nordic板) 问题1 我的问题出现在使用S5连接北欧板时。基本上,每当我在连接北欧设备后连接另一个设备时,它都会断开连接,日志显示: onClientConnectionState()状态=22 据我所知,这意味着Android操作系统与设备断开连接,我无能为力 我可以连接任意数量的TI板(测试6),并可以在之后连接北欧板,但只要我连接任何其他设备,北欧板就会断开连接

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

问题1 我的问题出现在使用S5连接北欧板时。基本上,每当我在连接北欧设备后连接另一个设备时,它都会断开连接,日志显示:

onClientConnectionState()状态=22

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

我可以连接任意数量的TI板(测试6),并可以在之后连接北欧板,但只要我连接任何其他设备,北欧板就会断开连接

当有一个北欧板连接,我试图连接另一个北欧板时,两者都断开

问题2 当我连接到Nordic板时,它会保持连接(即使之前连接了其他设备),但经过一定时间后,它会断开连接,并且在日志中显示:

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 board之后有可能连接到多个设备。所以我开始分析我在我的应用程序中所做的事情

我是否以不同的方式处理这两种设备类型?这些设备有不同的广告服务,我会对它们进行筛选。我在不同设备之间所做的唯一不同之处在于,我根据设备类型对它们进行标记,这取决于找到的服务。但就是这样,我已经多次分析了这一点,以确保不会以不同的方式处理任何重要的事情

经过一段时间的思考,我决定尝试另一款设备(低规格安卓GO手机和Doogee x20安卓7),我的应用程序运行完全正常。连接到2个北欧板,然后连接到多个TI板,并且它们不会断开连接。多次测试它的工作原理是一致的,没有问题

一个奇怪的现象是S5上偶尔会出现,我只是通过不断尝试连接使其工作,但这种情况只发生了2次,我不想等待一分钟后看看北欧董事会是否会断开,因为我还没有意识到这是1分钟的问题

我刚刚测试了另一个S5,它在我的第一次尝试中起了作用,但从那以后就没有了

因此,发生这种情况的秘诀似乎是:

  • 三星S5(这是由于安卓5.0还是特定于该设备,我不确定)
  • 北欧董事会,但不是TI
  • 我的应用程序,但不是nRF
更改上述任何一项都没有问题

编辑: 我正在使用此连接:

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

deviceEntry只是我创建的一个类,用于将Bluetooth GATT和状态保存在一起

通过与BLE设备通信解决了这个问题。不知道为什么这是特定于三星S5和北欧板。但我所做的只是为一个特征设置通知,它不再断开连接。

您能告诉我们如何“为一个特征设置通知”吗?