iOS 蓝牙

最佳实践

重新链接Peripheral

使用 Core Bluetooth 框架,有三种方式来重新连接 peripheral 设备:

  1. 使用 retrievePeripheralsWithIdentifiers:方法获取已知 peripheral 设备的列表,这些设备是我们已经搜索并连接过的设备。如果我们查找的 peripheral 在列表中,则尝试重新连接。
// connectedPeripheralId 为 peripheral.identifier
    NSArray *knownPeripherals = [self.centralManager retrievePeripheralsWithIdentifiers:@[self.connectedPeripheralId]];
    if (knownPeripherals.count == 0) {
        return;
    }

    self.peripheral = knownPeripherals[0];
    self.peripheral.delegate = self;
    [self.centralManager connectPeripheral:self.peripheral
                                   options:@{CBConnectPeripheralOptionNotifyOnDisconnectionKey: [NSNumber numberWithBool:YES]}];
  1. 使用 retrieveConnectedPeripheralsWithServices:方法获取当前连接到系统的 peripheral 设备的列表(如被其它程序连接着)。如果我们查找的 peripheral 设备在列表中,则连接它。
  2. 使用 scanForPeripheralsWithServices:options:方法扫描并搜索 peripheral 设备。如果找到,则连接它。

问题与验证

  1. 是否可以通过:检测蓝牙连接或者蓝牙是否断开,来判定蓝牙笔是否仍然连接
    解答:当蓝牙从控制中心关闭时,此时 delegate 收到更新,蓝牙 poweredOff;此时 CBCentralmanager 检测到的设备列表为空
  2. 是否可以通过:注册通知时,name 字段设为 nil,来接收所有的通知,观察是否有蓝牙断开、连接的系统通知,以及是否有 Apple Pencil 连接断开的通知
    解答:蓝牙连接与断开时系统未发通知, Apple Pencil 连接与断开时,系统也未发通知
  3. 在创建iOS 蓝牙demo工程,iPhone作为无法发现周边广播的蓝牙设备
    解答:scanForPeripheralsWithServices: options:函数放到delegateCBCentralManagerDelegate函数centralManagerDidUpdateState:(CBCentralManager *)central中即可解决问题

参考

  1. Core Bluetooth框架之一:Central与Peripheral
  2. Core Bluetooth框架之三:最佳实践

你可能感兴趣的:(iOS 蓝牙)