是否可以连接蓝牙设备,而无需在 iOS 中配对?

Posted

技术标签:

【中文标题】是否可以连接蓝牙设备,而无需在 iOS 中配对?【英文标题】:is it possible to connect bluetooth device, without pairing them in iOS? 【发布时间】:2017-09-06 08:48:18 【问题描述】:

问题不在于BLE设备,它只是普通的蓝牙设备。

目前我的代码是这样工作的, 我调用函数:

[[EAAccessoryManager sharedAccessoryManager] showBluetoothAccessoryPickerWithNameFilter:nil completion:^(NSError *error)
        

        ];
    

它会打开包含可用蓝牙设备列表的弹出窗口,然后我点击我想要的设备并获取一个对象并继续。

有什么方法可以跳过这个选择器步骤并直接获取我设备的对象?

【问题讨论】:

【参考方案1】:

不,不先配对是无法连接的。第一次,您必须通过“设置”应用程序或选择器让用户与设备配对。但是,在第一次配对后,如果配件已连接到 ios 设备,您可以跳过选择器并为您的配件获取 EAAccesory *。查询已连接配件列表的方法如下:

NSArray<EAAccessory *> *connectedAccessories = [EAAccessoryManager sharedAccessoryManager].connectedAccessories;
for (EAAccessory *accessory in connectedAccessories) 
    // Implement needed filter to recognize your device.
    // You can use for instance accessory.protocolStrings
    // The MAC address is available with [accessory valueForKey:@"macAddress"]

使用 EAAccessory 框架,您无法以编程方式启动与设备的连接。对于后续连接,您可以让您的设备重新连接到最后连接的设备(如果您控制固件)。如果您的应用在前台,这将触发EAAccessoryDidConnectNotification,否则它将排队通知并更新连接的附件列表。

【讨论】:

能否说明固件如何实现自动后续连接?我直接与固件工程师合作,并希望为用户提供在使用我正在开发的 iOS 应用程序之前不必进入设置应用程序并手动连接到附件的功能。 @Audible 好吧,相关文档是 MFi 计划的一部分,所以我不能公开提供任何细节。但是,如果您或固件团队有权访问 MFi 附件接口规范,您将在第 52.4 节(在修订版 R27 中)找到一个起点。根据产品中使用的蓝牙芯片组,芯片组附带的库中可能还有一个函数可以执行此操作。 我绝对了解严格的 MFi 准则,但是,这是一个很好的答案,谢谢!我可以访问 MFi 并将查看您引用的特定部分,我将与固件工程师和芯片制造商一起努力解决这个问题。非常感谢。

以上是关于是否可以连接蓝牙设备,而无需在 iOS 中配对?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以使用蓝牙重新连接断开的外围设备而无需再次扫描 ios

无需用户确认的蓝牙配对

Unity - Android - BLE 蓝牙权限

将 iOS 应用重新连接到配对的蓝牙设备?

安卓系统 蓝牙 与车载蓝牙的连接

无需配对即可获取设备位置的蓝牙库