CBPeripheralManager:add(_ service:CBMutableService)是否广告外围设备?

时间:2017-08-01 17:27:17

标签: ios bluetooth-lowenergy core-bluetooth cbperipheral

情景

我正在开发一个必须利用CoreBluetooth框架才能通过BLE发送数据的框架。我已经完成了使用iBeacons传达环境数据的要求,但我现在需要将数据从一个设备发送到另一个设备。我将使用CBCentralManager从一个应用程序scanForPeripherals和另一个将使用CBUUID广播外围设备的应用程序,然后中央应用程序将请求来自服务的数据特性

我能够正确地理解所有这些: a。我可以扫描我所在地区的外围设备,并在建筑物周围获得大量结果,但不是我播放的外围设备从我的设备。 b。我可以从CBUUID添加包含CBPeripheralManager didAddService的服务,并在CBPeripheralManager委托方法中取得成功。

但我的// To scan... centralManager?.scanForPeripherals(withServices: nil, options: nil) // To broadcast... let dataString = "SomeValueFromData" let data = dataString.data(using: .utf8) let base64 = data?.base64EncodedData() let uuid = CBUUID(nsuuid: Constants.Scan.uuid) let service = CBMutableService(type: uuid, primary: true) let properties = CBCharacteristicProperties.read let characteristic = CBMutableCharacteristic(type: uuid, properties: properties, value: base64, permissions: .readable) service.characteristics = [characteristic] peripheralManager.add(service) 仍无法发现我的外围设备。

CODE

CBCentralManager
  

注意:对于CBPeripheralManagerdidUpdateState,我实例化我的经理,然后等待poweredOn委托方法被调用,只有当状态为{{时才开始扫描或广播1}}。

HYPOTHESIS

我认为我已正确设置CBCentralManager以扫描所有外围设备(未指定任何服务UUID),但我仍然无法发现我的外围设备。我认为“广播”中存在一个缺陷。码。我对add(_ service: CBMutableService)上的CBPeripheralManager函数进行了一些研究,我不确定我是否正确理解了这一点。

问题

a。 add(_ service: CBMutableService)是否开始播放'一个CBPeripheral?我的印象是,这是我必须致电的唯一方法,这将“添加”#39;对某种队列的服务,将在BLE上发送,以便被发现。

  

add(_:)方法的Apple Documentation,"将服务及其任何相关特征和特征描述符发布到本地GATT数据库。"

我对本地GATT数据库进行了大量研究,Apple没有提供太多信息。

b。本地GATT数据库是否像我上面描述的那样运行,并且会开始广播'我的外围设备自动?或者我还有更多工作要做吗?

1 个答案:

答案 0 :(得分:1)

不,add(_ service:)仅将服务添加到CBPeripheralManager。要实际宣传服务,您需要致电startAdvertising(_ advertisementData:)

advertisementData是一本字典。您指定要为密钥CBAdvertisementDataServiceUUIDsKey通告的UUID数组。

您必须这样做的原因是外围设备可能提供比其广告更多的服务。由于广告包中的空间有限,您通常只会宣传您的" primary"服务;用于发现您的外围设备的服务。连接后,中央可以发现外围设备提供的其他服务。