CBCentralManagerScanOptionSolicitedServiceUUIDsKey的目的

Nic*_*ick 10 macos iobluetooth ios core-bluetooth

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

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

这个选项的目的是什么?什么是"征求服务"?在services数组中指定服务UUID有何不同?

all*_*rog 14

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

在当前的Core Bluetooth实现中,这在两个iOS设备之间并不可行.但是,如果你初始化CBPeripheralManager与征求服务(不需要做广告的),并使用CBCentralManager扫描希望使用这些征求服务外设,那么到底扫描外围大概能够使用所提供的服务,您的CBPeripheralManager一旦建立连接.目前有两个iOS设备无法执行此操作,因为没有API可以将请求的服务添加到广告中.(如果返回的另一端的retrieveConnectedPeripheralsWithServices方法就好像已初始化CBCentralManager那样,可以从外围端连接回来.)CBPeripheralCBPeripheralManager

相关SO问题:蓝牙LE和ANCS 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类型之一以邀请暴露服务请求数据中指定的一个或多个服务的其他设备进行连接.设备应处于无向可连接模式,并处于可发现模式之一.这使得提供这些服务中的一个或多个的中央服务器能够连接到该外围设备,以便外围设备可以使用中央服务器上的服务.