iOS 8.0蓝牙外设管理器不为addService提供回调

时间:2014-09-24 04:00:17

标签: ios8 core-bluetooth

我创建了一个蓝牙外设管理器。我正在使用[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. 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 *)外围设备didAddService :( CBService *)服务错误:(NSError *)错误;
    5. 在iOS8中,我们没有收到此回调。

    6. 外围设备管理器的更新状态代码如下所示。

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

      我使用以下方法添加服务:

      [self.peripheralManager addService:myService];

      这种方法在iOS8.0中是否已弃用,或者此错误可能是由于其他一些原因造成的?

1 个答案:

答案 0 :(得分:8)

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

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

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