【发布时间】:2019-11-09 19:18:59
【问题描述】:
我正在开发一个要连接到多个 BLE 设备的应用程序。我需要连接两种类型的 BLE 设备(一种使用 TI 板,一种使用 Nordic 板)。
问题 1
我的问题是在使用 S5 连接到北欧板时出现的。基本上每当我在连接北欧设备后连接另一台设备时,它都会断开连接并且日志显示:
onClientConnectionState() 状态=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 应用程序并连接到北欧板,然后连接到多个其他设备。很好,我查看了日志并且没有断开连接,而且我能够听到每台设备的所有特性。
所以我得出的结论是我在我的应用程序中做错了,因为可以在北欧板之后连接到多个设备。所以我开始分析我在我的应用程序中所做的事情。
我是否以不同的方式处理这两种设备类型?这些设备具有不同的广告服务,我对其进行过滤。我在设备之间做的唯一不同的事情是取决于我通过设备类型标记它们的服务。但就是这样,我已经多次分析了这一点,以确保没有任何重要的事情得到不同的处理。
在尝试找出导致此问题的原因一段时间后,我决定尝试使用另一台设备(低规格的 Android GO 手机和 Doogee x20 Android 7),我的应用程序运行良好。连接到 2 个 Nordic 板,然后连接到多个 TI 板,它们不会断开连接。多次测试它始终如一地工作,没有问题。
在 S5 上偶尔会出现一个奇怪的问题,我只是通过不断尝试连接来让它工作,但这只发生了 2 次,我没想过等待一分钟后北欧板是否断开连接,因为我1 分钟的问题还没意识到这一点。
我刚刚在另一台 S5 上进行了测试,它在我的第一次尝试中有效,但此后一直没有。
所以发生这种情况的秘诀似乎是:
- Samsung S5(这是由于 Android 5.0 还是特定于我不确定的设备)
- 北欧板但不是 TI
- 我的应用,但不是 nRF
改变以上任何一个都没有问题
编辑: 我正在使用它来连接:
deviceEntry.gatt = device.connectGatt(this, false, GattCallback(this, deviceEntry))
deviceEntry 只是我为将 BluetoothGatt 和状态保存在一起而创建的一个类
【问题讨论】:
标签: android bluetooth bluetooth-lowenergy