CBCentralManagerScanOptionSolicitedServiceUUIDsKey的目的

时间:2014-02-14 17:15:17

标签: ios macos core-bluetooth iobluetooth

在CoreBluetooth中扫描设备时可以使用CBCentralManagerScanOptionSolicitedServiceUUIDsKey选项,文档说明

  

指定此扫描选项会导致中央管理器也进行扫描   对于请求数组中包含的任何服务的外围设备。

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

1 个答案:

答案 0 :(得分:14)

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

在当前的Core Bluetooth实现中,这在两个iOS设备之间并不可行。但是,如果使用请求的服务初始化CBPeripheralManager(无需宣传这些服务)并使用CBCentralManager扫描想要使用这些请求服务的外围设备,那么最终扫描的外围设备可能会使用建立连接后,CBPeripheralManager提供的服务。目前有两个iOS设备无法执行此操作,因为没有API可以将请求的服务添加到广告中。 (如果retrieveConnectedPeripheralsWithServices上的CBCentralManager方法将CBPeripheral的另一端作为CBPeripheralManager初始化{{1}},则可以从外设侧连接回来。)

相关问题:Bluetooth LE and ANCS in iOS
参考博客文章: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能够提供一个或多个   这些服务连接到这个外设,使外围设备   可以使用中央的服务。