我对 iOS 并不陌生,但总体上对 CoreBluetooth 和 BTLE 比较陌生。使用运行 iOS 10 或更高版本(当前为 11.2)的设备,我发现如果打开和关闭蓝牙,则无法再访问绑定的外围设备。
稍微调试了一下,好像一旦bonded,两端保存的安全信息中就包含了每个peer的地址。iOS 端可以很好地记住外围设备,但是在关闭并再次打开蓝牙后,iOS 设备的地址会自行更改,因此对于外围设备,其当前注册的绑定对等点(地址)不再存在。为此,在清除外设侧的bonding信息之前,两者之间的连接是不可能的(Peripheral device一旦bonded就执行直接通告,只有其bonded peer才能看到)。
我想知道 A)在关闭/打开蓝牙后,无论如何要在 iOS 端保留相同的地址 B)如果无法保留/调用地址,处理这种情况的常用方法是什么?
我已经搜索了核心蓝牙编程参考,并尽我所能搜索了这个问题,但无济于事。
与 iOS 中心绑定时通过串行连接进行外围输出:
BTA=001EC0461948 名称=The_Lock1948 已连接= 7DD350CC912D ,1 已绑定=7DD350CC912D,1 服务器服务=00000001 功能=20000000 TxPower=4
iOS 蓝牙关闭/打开,然后与完全相同的 iOS 设备重新连接:
BTA=001EC0461948 名称=The_Lock1948 已连接= 5DDC08C0B0A3 ,1 已绑定=7DD350CC912D,1 服务器服务=00000001 功能=24000000 TxPower=4
如您所见,“已连接”地址已更改,而外围设备仍绑定到先前的地址。两者之间的唯一区别是 BT 设置的切换。当我说 BT 电源关闭/打开时,我的意思是真正关闭和打开电源,而不是 iOS 11+ 中的“允许新连接”设置。
顺便说一句,补充一点,我已经看到其他 2 个 BTLE 外围设备(键盘)在 iOS BT 电源切换后无法重新连接,直到它们以某种方式重置。