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的主要内容,如果未能解决你的问题,请参考以下文章

未为 iOS 上的 POST 请求设置超时间隔

未为 C# 项目设置 OutputPath 属性

未为 PPT 中的图表设置数据标签属性

Winforms:运行 oledb 连接时出错(可安装的 Isam,未为命令对象设置 Commandtext)

什么可能导致 SQL Server JDBC 错误“未为参数号 0 设置值”以访问输出参数?

未为项目设置OutputPath属性(C ++,空白新解决方案,VS2017)