首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CBPeripheralManager:添加(_ service: CBMutableService)广告外设吗?

CBPeripheralManager:添加(_ service: CBMutableService)广告外设吗?
EN

Stack Overflow用户
提问于 2017-08-01 17:27:17
回答 1查看 1.1K关注 0票数 0

场景

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

所有这些都能正常工作,因为我可以告诉你:a.,我可以扫描我所在区域的外围设备,在大楼周围得到很多结果,但不是我从设备上播放的外围设备。b. --我可以从CBPeripheralManager中添加包含CBUUID的服务,并在didAddService委托方法中获得成功。

但是我的CBPeripheralManager仍然无法发现我的外围设备。

代码语言:javascript
复制
// 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)

注意:对于CBCentralManagerCBPeripheralManager,我正在实例化我的管理器,然后等待调用didUpdateState委托方法,只有在状态为poweredOn时才开始扫描或广播。

假说

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

问题

a. add(_ service: CBMutableService)开始了CBPeripheral的“广播”吗?我的印象是,这是我必须调用的唯一方法,这将“添加”服务到某种类型的队列中,这些队列将在BLE上被发现。

苹果文档 on the add(_:)方法中,“将服务及其任何相关的特征和特征描述符发布到当地的GATT数据库。”

我对当地GATT数据库做了大量的研究,而Apple并没有提供太多的信息。

b.本地的GATT数据库是否像我前面所描述的那样以队列的方式运行,并将自动开始我的外围设备的“广播”?还是我还有更多的事要做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-01 19:06:20

不,add(_ service:)只将服务添加到CBPeripheralManager。要真正为服务做广告,您需要调用startAdvertising(_ advertisementData:)

advertisementData是一本字典。指定要为键CBAdvertisementDataServiceUUIDsKey做广告的UUID数组。

你必须这样做的原因是,一个外围设备提供的服务可能比它所宣传的要多。由于广告包中的空间有限,通常只为您的“主要”服务(用于发现您的peripheraL的服务)做广告。一旦连接,中央就可以发现你的外围设备提供的其他服务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45444249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档