13

CBCentralManagerScanOptionSolicitedServiceUUIDsKey选项在扫描 CoreBluetooth 中的设备时可用,文档指出

指定此扫描选项会导致中央管理器也扫描请求阵列中包含的任何服务的外围设备。

这个选项的目的是什么?什么是“请求服务”?与在服务数组中指定服务 UUID 有何不同?

4

1 回答 1

15

据我了解,服务请求意味着外围设备可以指示在连接发生时它将要在中央设备上使用哪些服务。例如,您有一个ANCS外围设备(智能手表或其他),它会宣传自己并将 ANCS 服务作为请求的服务添加到广告中。这将向中央指示该外围设备在连接后将寻找 ANCS 服务。在 iOS 的情况下,这导致用户可以从蓝牙设备列表连接到外围设备,而无需运行任何应用程序。

在当前的 Core 蓝牙实现中,这在两个 iOS 设备之间是不可行的。但是,如果您使用请求的服务初始化 CBPeripheralManager(无需宣传这些服务)并使用 aCBCentralManager扫描想要使用这些请求的服务的外围设备,那么最终扫描的外围设备可能能够使用您提供的服务CBPeripheralManager一旦建立连接。目前有两台 iOS 设备无法执行此操作,因为没有 API 可以将请求的服务添加到广告中。(如果返回的另一端的retrieveConnectedPeripheralsWithServices方法好像已初始化,则可以从外围端连接回来。)CBCentralManagerCBPeripheralCBPeripheralManager

相关的 SO 问题:iOS 中的蓝牙 LE 和 ANCS
参考博客文章:http ://blog.punchthrough.com/post/63658238857/the-apple-notification-center-service-or-wtf-is

蓝牙规范 V4.0 第 3 卷。C 部分。第 11.1.9 节

11.1.9 服务请求

可以发送一种服务请求 AD 类型以邀请其他设备连接,这些设备公开了服务请求数据中指定的一项或多项服务。设备应处于非定向可连接模式和可发现模式之一。这使得提供这些服务中的一项或多项的 Central 能够连接到此 Peripheral,以便 Peripheral 可以使用 Central 上的服务。

于 2014-02-15T22:07:05.853 回答