如何解决核心蓝牙-使用新特性或更少特性修改服务
我有一个使用Core Bluetooth
的应用程序,我希望外围设备管理器在服务中添加或删除特征。我可以按照首先设置它们的方式添加新特征:
serialService.characteristics.append(newCharacteristic)
但是如果要删除现有特征怎么办?我可以得到一系列现有特征。我这样初始化:let newCharacteristic = CBMutableCharacteristic(type: cbuuid,properties: [.read,.notify],value: nil,permisions: .readable)
。看来我应该可以遍历特征数组并查询type
以获取要删除的那个,但是我没有看到type
是可以查询的属性。在某个地方可以到达吗?还是我需要从头开始构建服务而不是对其进行修改?
修改服务后,如何将更改通知中央?我要先删除服务然后再添加它吗?
解决方法
我不确定CBMutableCharacteristic
的第一个参数为什么要使用称为“类型”的参数进行初始化。这有点令人困惑(即使在ObjC中也是如此)。您想要的属性的名称为uuid
。
Changing a CBMutableService once you've added it doesn't make any changes to it.,您需要删除该服务并重新添加。
将服务添加到外围设备的本地数据库后,Core Bluetooth会缓存该服务,您将无法再对其进行更改。
一旦删除并重新添加服务,这将修改GATT数据库并触发到中心的通知。蓝牙标准的处理方式是使用“服务已更改”特征(0x2a05),但是如果您在Apple设备之间进行交谈,Apple可能会以专有方式进行此操作。如果这两个都是iOS设备,则应该期望中央的CBPeripheralDelegate收到peripheral(_:didModifyServices:)
(可能两次,一次用于删除,一次用于添加)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。