gpt4 book ai didi

iOS 蓝牙后台连接外设

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:17 26 4
gpt4 key购买 nike

我正在实现 Core Bluetooth 后台模式并且已成功进入 willRestoreState 方法。系统正确处理扫描和唤醒我的应用程序服务广告和传入数据。但是,如果应用程序终止时设备已经连接(由于内存管理),我似乎无法重新建立外围设备的功能所有权。没有调用委托(delegate)方法。这是我的 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];
}

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

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

谢谢你,SO

最佳答案

如果应用程序终止时手机已经连接到外设,它不会调用 centralManager:didConnectPeripheral 回调,因为它已经连接并且 Core Bluetooth 已经为您保持连接并存储了详细信息。恢复 willRestoreState 中的连接详细信息取决于您,正如您正确完成的那样。

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

关于iOS 蓝牙后台连接外设,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com