我正在为Core Bluetooth开发基于开源块的包装器。

目前,我正在开发外围设备管理器部分。

我正在广播它,我可以看到该服务及其特征。查看其他服务时,我可以看到它们被赋予了有意义的名称,例如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参数,它可以工作,但不能很好地显示给用户。

是否可以将CBServiceCBCharacteristic的UUID设置为有意义的字符串?

还值得注意的是,该特性的值在查看时为空,为了解原因,加分。

谢谢

最佳答案

蓝牙组织已接受一些services and their characteristics作为标准。使用Core Bluetooth库时,可以通过4个十六进制数字分配的编号来引用这些编号-请参见CBUUID documentation

用户定义的UUID无法被Core Bluetooth库识别,因为它们没有分配编号,因此您只能显示其完整的UUID。

如果您尚未发出读取或未收到通知,则特征的值将为null。

10-04 17:28