我正在尝试使用Core Bluetooth Framework
的{{1}}执行以下操作:
1)连接外围设备
2)服务发现
3)特征发现
4)开始对特定特征进行通知
当与核心蓝牙(iOS
)无关的回调触发时,必须在后台触发这些操作。
我已正确设置应用程序的蓝牙背景设置,当应用程序通过中央按钮放入后台时,一切正常:核心位置回调启动,核心蓝牙步骤正确执行。 当应用程序被任务管理器向上扫描时,问题就出现了:在这种情况下,当核心位置回调启动时,手机能够连接到外围设备(1),但它不会发现服务。
我正在使用带有iOS 10.3.1和micro nrf51822的iPhone 6。
这是我的代码:
CBCentralManager初始化(viewDidLoad)
Core Location Framework
核心位置回调:
self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:@{ CBCentralManagerOptionRestoreIdentifierKey:@“myCentralManagerIdentifier”}];
CoreBluetooth回调:
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{
NSLog(@“*** enter region”);
dispatch_async(dispatch_get_main_queue(), ^{
NSString *savedUuid = [[NSUserDefaults standardUserDefaults]stringForKey:@“preferenceUuid”];
if (savedUuid!=NULL){
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:savedUuid];
NSArray *arrayUuid = [NSArray arrayWithObjects:uuid, nil];
_knownPeripheral = [[self.centralManager retrievePeripheralsWithIdentifiers:arrayUuid] objectAtIndex:0];
}
if (_knownPeripheral!=NULL){
[self.centralManager connectPeripheral:_knownPeripheral options:nil];
}
});
}
当应用程序从被杀死状态唤醒时,如何正确执行从1)到4)的步骤?
谢谢