首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS蓝牙后台连接外设

iOS蓝牙后台连接外设
EN

Stack Overflow用户
提问于 2016-05-17 20:09:43
回答 1查看 989关注 0票数 2

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

代码语言:javascript
复制
-(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];
}

苹果docs规定,应用程序必须在本地连接到设备,但无论是否调用-connectPeripheral_peripheral.state都显示为已连接。既不调用-centralManager:didConnectPeripheral也不调用-centralManager:didFailToConnectPeripheral:。类似地,[_peripheral readRSSI]不会导致调用-peripheral:didReadRSSI委托方法。

我似乎找不到此功能的完整示例代码。如果任何人有任何我可以解析的东西来帮助解决问题,我也会非常感激。

谢谢你,所以

EN

回答 1

Stack Overflow用户

发布于 2016-06-02 22:15:55

如果在应用程序终止时手机已经连接到外围设备,它将不会调用centralManager:didConnectPeripheral回调,因为它已经连接,并且Core Bluetooth已经为您保留了该连接并存储了详细信息。按照您正确的做法,在willRestoreState中恢复连接的详细信息由您决定。

如果它已经连接,我所知道的唯一能唤醒它的就是外围设备是否通知、指示或断开连接,在这种情况下,如果您通过设置委托正确地恢复了您的外围设备,则您要查找的回调是

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)error:(NSError *)

-(void)centralManager:(CBCentralManager *)didDisconnectPeripheral:(CBPeripheral *)error:(NSError *)

因此,我建议您检查peripheral.connected状态,只有在peripheral.connected != CBPeripheralStateConnectedperipheral.connected != CBPeripheralStateConnecting时才调用connectPeripheral

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37275772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档