我正在开发一个BLE项目,当应用程序在前台时一切正常。它可以发现和连接外设,所有的回调方法都能完美工作。
但问题是,当应用程序处于后台模式(我按下了主页按钮),只有
我使用了
有什么想法为什么当应用程序在后台时
但问题是,当应用程序处于后台模式(我按下了主页按钮),只有
centralManagerDidUpdateState
委托方法被调用。- (void)centralManagerDidUpdateState:(CBCentralManager *)central{
switch (central.state) {
case CBCentralManagerStatePoweredOn:
[self.cbCentralManager scanForPeripheralsWithServices:nil options:@{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }];
break;
default:
break;
}
}
我使用了
scanForPeripheralsWithServices:nil
选项,但是当应用程序在后台时,didDiscoverPeripheral
回调从未被调用。我已经编辑了我的plist文件,添加了“bluetooth-central”选项以支持后台的BLE中心角色。有什么想法为什么当应用程序在后台时
didDiscoverPeripheral
方法没有被调用?
didConnectPeripheral
方法会在连接操作时被调用,而不是在搜索周边设备时。您是否收到了didDiscoverPeripheral
方法的回调?请注意,在后台模式下,重复选项将被忽略,您只会收到每个周边设备的单个发现事件。 - Paulw11didDiscoverPeripheral
实际上没有被调用,我已经修改了我的问题。如果应用程序在前台已经开始扫描外设,当应用程序在后台时,scanForPeripheralsWithServices
回调会针对同一外设被调用吗?当 iOS 在前台找到这个外设时,它会忽略重复的情况吗? - dingdidDiscoverPeripheral
回调,我该怎么做?我需要初始化一个新的 Central 类来重新开始扫描吗?实际上,我想在应用程序在后台时重新连接相同的外设。如果没有调用didDiscoverPeripheral
,我该如何重新连接?在苹果蓝牙指南中,我可以使用retrievePeripheralsWithIdentifiers:
来恢复外设。但是我从retrievePeripheralsWithIdentifiers:
方法中获取到了空的外设。 - dingdidConnectPeripheral
的调用。基本上,在didDisconnectPeripheral
中,只需使用其外围对象调用connect即可。 - Paulw11