CoreBluetooth问题:无法发现设备

时间:2014-03-11 13:04:12

标签: ios iphone objective-c core-bluetooth

我正在使用名为WIRELESS BLOOD PRESSURE WRIST MONITOR的BLE设备。 我已经下载了这些应用程序,并且每件事都很有效。 但是当我尝试从我的应用程序连接到设备时,我没有收到回复。 我的代码很像developer.apple.com的代码,也是tutorial

这是我的代码:

_centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[_centralManager scanForPeripheralsWithServices:nil options:nil];

我收到centralManagerDidUpdateState代表的通知,但即使我在服务中使用didDiscoverPeripheral进行搜索,我也无法收到nil

当我去设置 - >蓝牙:我可以看到设备,它已连接,蓝牙信号开启。所以iPhone可以看到BLE设备,所以当我在我的代码中使用这些方法时 retrieveConnectedPeripheralsWithServices获取连接设备的列表,返回0对象。

所以我不知道是什么问题,请记住BLE设备在使用自己的应用程序时效果很好,因此它的低能量不经典,而BLE设备在打开时会显示蓝牙信号应用程序。

所以来自GEEKS的任何想法:D

谢谢..

2 个答案:

答案 0 :(得分:2)

不要在初始化中央管理器后立即搜索,而是先尝试等待电源开启的更新。

尝试以下步骤:

  • 在viewDidLoad中删除对scanForPeripheralsWithServices
  • 的调用
  • 添加方法scanForPeripherals,首先检查中央管理器是否已启动,并检查扫描状态(见下文)。

代码:

- (void)scanForPeripherals {
  if (self.centralManager.state != CBCentralManagerStatePoweredOn) {       
      NSLog(@"CBCentralManager must be powered to scan peripherals. %d", self.centralManager.state);
      return;
  }    

  if (self.scanning) {
      return;
  }    

  self.scanning = YES;    

  [self.centralManager scanForPeripheralsWithServices:nil options:@{ CBCentralManagerScanOptionAllowDuplicatesKey: @YES }];
  NSLog(@"Scanning started");
}
  • 在ViewWillAppear中调用[self scanForPeripherals]
  • 在centralManagerDidUpdateState中,仅在中央管理器开启时才调用scanForPeripherals。

代码:

- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
    if (central.state != CBCentralManagerStatePoweredOn) {        
        NSLog(@"CBCentralManager not powered on yet");
        return;
    }    
    // The state must be CBCentralManagerStatePoweredOn
    [self scanForPeripherals];
}
  • 添加BOOL属性扫描。使用扫描功能可以让您在调用更新回调之前安全地尝试扫描。您应该处理扫描状态以防止调用扫描两次。

答案 1 :(得分:2)

你需要照顾很多部分:

  1. 您需要等待centralManagerDidUpdateState表示CBCentralManagerStatePoweredOn。您之前做的任何事情都会导致错误或被忽略。因此,您对scanForPeripheralsWithServices的调用可能会被忽略。这适用于其他API,例如您提到的retrieveConnectedPeripheralsWithServices
  2. 设备连接后也可能会关闭广告,因此在您断开连接之前扫描不会成功。
  3. 在后台扫描有很多限制。您可以搜索SO问题以查找详细信息。在一开始我会建议你不要尝试背景操作,因为它可能非常棘手。