我正在为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参数,它可以工作,但不能很好地显示给用户。是否可以将
CBService
或CBCharacteristic
的UUID设置为有意义的字符串?还值得注意的是,该特性的值在查看时为空,为了解原因,加分。
谢谢
最佳答案
蓝牙组织已接受一些services and their characteristics作为标准。使用Core Bluetooth库时,可以通过4个十六进制数字分配的编号来引用这些编号-请参见CBUUID documentation
用户定义的UUID无法被Core Bluetooth库识别,因为它们没有分配编号,因此您只能显示其完整的UUID。
如果您尚未发出读取或未收到通知,则特征的值将为null。