【问题标题】:iOS Bluetooth Background Connected PeripheraliOS 蓝牙后台连接外设
【发布时间】:2016-09-13 12:47:25
【问题描述】:

我正在实现核心蓝牙后台模式,并已成功使用willRestoreState 方法。系统正确处理扫描和唤醒我的应用程序的服务广告和传入数据。但是,如果在应用程序终止时设备已经连接(由于内存管理),我似乎无法重新建立外围设备的功能所有权。没有调用委托方法。这是我的willRestoreState 方法:

-(void)centralManager:(CBCentralManager *)central willRestoreState:(NSDictionary<NSString *,id> *)state {
    NSArray *peripherals = state[CBCentralManagerRestoredStatePeripheralsKey];
    NSString* NFCName = @"ACR1255U-J1-001236";

    _centralManager = central;
    _centralManager.delegate = self;

    for(CBPeripheral* peripheral in peripherals) {
        if([peripheral.name isEqualToString:NFCName]) {
            NSLog(@"Restoring NFC Connection");
            _peripheral = peripheral;
            _peripheral.delegate = self;

            [_centralManager connectPeripheral:_peripheral options:nil];
            return;
        }
    }

    [_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:@"FFF0"]] options:nil];
}

Apple docs 声明应用程序必须在本地连接到设备,但无论是否调用 -connectPeripheral,_peripheral.state 都会读取已连接。 -centralManager:didConnectPeripheral 和 -centralManager:didFailToConnectPeripheral: 都没有被调用。同样[_peripheral readRSSI] 不会导致调用-peripheral:didReadRSSI 委托方法。

我似乎找不到此功能的完整示例代码。如果有人有任何我可以解析以帮助解决问题的方法,我也将不胜感激。

谢谢你,所以

【问题讨论】:

  • 嗨 NewEndian,您找到解决此问题的方法了吗?我有同样的问题。谢谢。
  • 嗨,@newedian 如果您有任何解决方案,请告诉我。我也面临同样的问题。谢谢。

标签: ios bluetooth background cbcentralmanager cbperipheral


【解决方案1】:

如果应用程序终止时手机已经连接到外围设备,它不会调用 centralManager:didConnectPeripheral 回调,因为它已经连接并且 Core Bluetooth 已为您保持该连接并存储了详细信息。正如您所做的那样,您可以在 willRestoreState 中恢复连接的详细信息。

如果它已经连接,我知道的唯一可以唤醒它的是外围设备是否通知或指示或断开连接,在这种情况下,如果您通过设置委托回调正确恢复了外围设备找的是
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)error:(NSError *)
或
-(void)centralManager:(CBCentralManager *)didDisconnectPeripheral:(CBPeripheral *)error:(NSError *)
所以我建议你检查peripheral.connected 状态,如果peripheral.connected != CBPeripheralStateConnected 或peripheral.connected != CBPeripheralStateConnecting 只调用connectPeripheral

【讨论】:

    猜你喜欢
    • 2013-08-07
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多