gpt4 book ai didi

ios8 - iOS 8.0 蓝牙外设管理器没有为 addService 提供回调

转载 作者:行者123 更新时间:2023-12-01 01:33:21 24 4
gpt4 key购买 nike

我创建了一个蓝牙外设管理器。我正在使用 [self.peripheralManager addService:myService] 向这个外设管理器添加一些服务。

对于 iOS7.0,我收到了此方法的回调 - (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error

但是对于 iOS8.0,我没有收到任何针对同一方法的回调,并且我无法建立连接。

以下是我遵循的步骤:

  1. 使用创建外设管理器[[CBPeripheralManager alloc] initWithDelegate: self queue:nil options:@{CBPeripheralManagerOptionShowPowerAlertKey: @YES}];

2.使用创建服务myService = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:@"AAAA"] primary:YES];

  1. 使用创建特征myCharacteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:@"BBBB"] 属性:CBCharacteristicPropertyIndi​​cate 值:nil 权限:CBAttributePermissionsReadable];

  2. 将此特性添加到服务中myService.characteristics = 特征

  3. 将此服务添加到外设管理器使用[peripheralManager addService:myService];

  4. 上述步骤的回调发生在

    • (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error ;
  5. 在 iOS8 中我们没有收到这个回调。

外设管理器确实更新状态的代码如下所示。

-(void) peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral{
NSLog(@"Changed State : %d", peripheral.state);
if (peripheral.state != CBPeripheralManagerStatePoweredOn) {
[self deviceDisconnected];
return;
}
}

我正在使用以下方式添加服务:

[self.peripheralManager addService:myService];

此方法在 iOS8.0 中是否已弃用或此错误可能是由于其他一些原因?

最佳答案

@Paulw 在评论中正确回答了这个问题。下面是答案

ios7 和 ios8 之间的变化在于 ios7 在蓝牙硬件初始化(开机状态)并发出警告之前允许操作。在 ios8 中它只是失败了。

所以我们必须在添加任何服务之前等待 peripheralManagerDidUpdateState: 回调。

关于ios8 - iOS 8.0 蓝牙外设管理器没有为 addService 提供回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26008296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com