在后台长时间运行的BLE扫描有时会起作用

时间:2018-05-12 19:18:17

标签: ios bluetooth bluetooth-lowenergy

注意:我可以访问BLE设备和软件,因此解决方案可能涉及更改。

问题:

外围设备只能在大约25-30%的尝试期间连接和传输所需的数据。

有关BLE外围设备的信息:

有关BLE中心的信息:

需要注意的一些事项:

  • 设备在30秒后完全关闭,因此必须重新发现。
  • 在这30秒内,似乎如果在前3或4秒内未建立连接,则永远不会进行连接。我很困惑为什么会出现这种情况。 (我最好的猜测是它与阶段排列的方式有关)

有没有人知道为什么我们会遇到这种行为,以及我们如何修复BLE外设和/或中心以最大化发现和连接的可能性?

更新:

以下是我的代码的所有与BLE相关的部分,通过外围设备发现:

在我的AppDelegate.h

@property (nonatomic, strong) NSArray *services;
@property (nonatomic, strong) NSArray *characteristics;

@property (nonatomic, strong) CBCentralManager *centralManager;
@property (nonatomic, strong) CBPeripheral *peripheral;

在我的AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.services = @[[CBUUID UUIDWithString: @"A1B0"]];
    self.characteristics = @[[CBUUID UUIDWithString: @"0321"]];

    self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}

- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
  switch ([central state]) {
    case CBCentralManagerStateUnauthorized:
      NSLog(@"*** This app is not authorized to use Bluetooth Low Energy ***");
      break;
    case CBCentralManagerStatePoweredOff:
      NSLog(@"*** Bluetooth on this device is currently powered off ***");
      break;
    case CBCentralManagerStatePoweredOn:
      [self.centralManager scanForPeripheralsWithServices:self.services options:nil];
      break;
    default:
      NSLog(@"*** The state of the BLE Manager is unknown ***");
  }
}

- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
  self.peripheral = peripheral;
  [self.centralManager connectPeripheral:peripheral options:nil];
}

而且要清楚,这在前景中完美地工作(每次尝试)。它的背景扫描表现得很奇怪。

0 个答案:

没有答案