CoreBluetooth - 未为服务设置 UUID
Posted
技术标签:
【中文标题】CoreBluetooth - 未为服务设置 UUID【英文标题】:CoreBluetooth - UUID not set for a service 【发布时间】:2014-08-14 09:49:27 【问题描述】:我正在尝试在 Mac 和 Iphone 之间使用蓝牙。但是Mac上似乎没有设置UUID。我在mac上使用:
self.characteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:@"DDCA9B49-A6F5-462F-A89A-C2144083CA7F"] properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];
self.service = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:@"BA6878AE-4F70-41AD-B793-8F8AF2A2811E"] primary:YES];
self.service.characteristics = @[self.characteristic];
NSLog(@"UUID SERVICE : %@",self.service.UUID.description);//WTF ?
[self.peripheralManager addService:self.service];
但是 NSlog 打印出来
UUID SERVICE : Unknown (<ba6878ae 4f7041ad b7938f8a f2a2811e>)
我认为这就是为什么 Iphone 在尝试 scanForPeripheralsWithService(在 Iphone 上)时找不到 mac 的原因
self.serviceAlert = @"BA6878AE-4F70-41AD-B793-8F8AF2A2811E";
//add the services to the Array
self.services = [NSArray arrayWithObjects:
[CBUUID UUIDWithString:self.serviceAlert],
nil];
self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:nil];
[self.centralManager scanForPeripheralsWithServices:self.services options:nil];
知道为什么服务的 UUID 没有在 mac 上正确设置吗?
编辑:我使用
[peripheral startAdvertising:@
CBAdvertisementDataLocalNameKey: @"hello"
];
在didAddService方法中;我可以通过[self.centralManager scanForPeripheralsWithServices:nil options:nil]
找到服务
【问题讨论】:
它似乎设置正确。它向您显示您初始化它的值。 你确定吗?当我在 Iphone 上尝试相同的 NSlog 时,我得到的东西没有“未知”字样:UUID SERVICE : BA6878AE-4F70-41AD-B793-8F8AF2A2811E
CoreBluetooth 在 MacOS 上的实现与在 ios 上不同,特别是 CBUUID 的描述方法不同。看看它打印出来的内容:“ba6878ae 4f7041ad b7938f8a f2a2811e”。那是你初始化它的 UUID 字符串。
你什么时候宣传你的服务?另外,如果你尝试[self.centralManager scanForPeripheralsWithServices:nil options:nil];
你找到了吗?
如果我使用[self.centralManager scanForPeripheralsWithServices:nil options:nil];
,我会找到它。我在- (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error
方法中宣传服务
【参考方案1】:
我找到了解决方案,我只是很愚蠢。服务广告不好
[peripheral startAdvertising:@
CBAdvertisementDataServiceUUIDsKey :
@[self.service.UUID] ];
是个好办法。
【讨论】:
以上是关于CoreBluetooth - 未为服务设置 UUID的主要内容,如果未能解决你的问题,请参考以下文章
Winforms:运行 oledb 连接时出错(可安装的 Isam,未为命令对象设置 Commandtext)