BLE:将Android中央设备重新连接到iOS外围设备

时间:2020-01-21 18:39:09

标签: bluetooth-lowenergy core-bluetooth android-ble

经过几天的研究和反复试验,我和我的同事们都希望StackOverflow社区有一个可行的解决方案。

我们有一个Android Smartwatch。我们开发了一个充当BLE中心的应用程序。该应用程序显示一个QR码,该码对每个Smartwatch唯一的UUID进行编码。显示该QR代码时,它正在积极扫描使用该UUID宣传服务的设备。

我们还开发了一个iOS应用程序,可以扫描QR码并开始使用收到的服务UUID进行广告。然后,Android Smartwatch可以非常快速地连接到iOS设备。

Smartwatch的目的之一是显示来自iOS设备的推送通知。因此,成功建立连接后,Smartwatch-App会订阅ANCS数据源和通知源特征。这将启动“ Just Works”配对,因此您只需在iOS设备上单击“配对”即可。之后,您必须允许将iOS通知共享给Smartwatch,然后Smartwatch成功接收通知。 ANCS也是iOS设备必须处于外围设备角色的原因。

直到这里一切正常。

当用户离开蓝牙范围或禁用蓝牙并在iOS设备上启用蓝牙时,应触发自动重新连接。当iOS应用程序处于前台时,它会重新连接。不幸的是,当iOS应用在后台运行时,它不起作用。这可能与以下事实有关:如CoreBluetooth文档中所述,当应用程序在后台运行时,iOS设备未使用所需的UUID进行广告宣传:

All service UUIDs contained in the value of the CBAdvertisementDataServiceUUIDsKey advertisement key are placed in a special “overflow” area; they can be discovered only by an iOS device that is explicitly scanning for them.

我们尝试了多种方法将Android Smartwatch重新连接到iOS。据我了解,当使用autoConnect = false制作第一个connectGatt时,以及当连接断开时,使用autoConnect = true调用丢失的设备上的connectGatt时,它应该工作,但它永远不会重新连接。至少不在15分钟内。再次扫描也不起作用,因为UUID不再在后台发布。

我们还尝试另外让Android设备充当外围设备,以便iOS可以连接到它。连接后,我们将数据写入“ INITIATE_ANCS”特征,然后让Android设备在传递给onCharacteristicWrite的设备上调用connectGatt。这导致了有趣的行为:
-连接正常,我们可以从iOS阅读Smartwatch-Characteristic。
-订阅ANCS特性时,它启动了配对。但是,除了“ Just Works”配对之外,它还显示了我们必须在Smartwatch上键入的iOS设备上的6位代码。
-配对在每个新的连接上启动,并且总是在Android和iOS的系统设备管理器中创建新设备。
-当iOS应用在后台运行时,配对未启动。

我们确实进行了详尽的研究,但找不到解决方案。对于iOS和Android的BLE工作原理,我们是否理解有问题?我们真的希望在这里找到一位具备重新连接工作所需知识的专家。

编辑: Android设备在Android 5.1.1上运行,目前无法更新。 iOS测试设备正在运行iOS 13.3,并且应与iOS 13+兼容

0 个答案:

没有答案
相关问题