我正在为 Core Bluetooth
开发基于 block 的开源包装器。
目前我正在开发外设管理器部分。
我让它广播,我可以看到服务和它的特性。在查看其他服务时,我可以看到它们被赋予了有意义的名称,例如 Battery 和 Current time。
当我尝试为我创建的任何服务或特征提供一个有意义的名称时,它会返回错误 String Characteristic name does not represent a valid UUID
。
到目前为止我的代码是
[_peripheralManager startAdvertising:@{CBAdvertisementDataLocalNameKey : @"Peripheral name",
CBAdvertisementDataServiceUUIDsKey : [CBUUID UUIDWithNSUUID:[NSUUID UUID]]}];
CBMutableCharacteristic *transferCharacteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:@"Characteristic name"]
properties:CBCharacteristicPropertyRead
value:[@"Test value" dataUsingEncoding:NSUTF8StringEncoding]
permissions:CBAttributePermissionsReadable];
CBMutableService *transferService = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:@"Service name"]
primary:YES];
[transferService setCharacteristics:@[transferCharacteristic]];
[_peripheralManager addService:transferService];
如果我用 [CBUUID UUIDWithNSUUID:[NSUUID UUID]]
替换任何 initWithType 参数,它可以工作,但不能很好地显示给用户。
有没有办法将 CBService
或 CBCharacteristic
的 UUID 设置为有意义的字符串?
还值得注意的是,在查看时该特征的值为空,了解这是为什么会加分。
谢谢
最佳答案
蓝牙组织已经接受了一些services and their characteristics作为标准。使用 Core Bluetooth 库时,可以通过分配给它们的 4 位十六进制数字来引用它们 - 请参阅 CBUUID documentation
用户定义的 UUID 无法被 Core Bluetooth 库识别,因为它们没有分配编号,因此您只能使用完整的 UUID 显示它们。
如果您尚未发出读取或收到通知,则该特征的值将为空。
关于ios - CoreBluetooth - 具有有意义的 UUID 的 CBMutableCharacteristic 或 CBMutableService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23489071/