我们的信标硬件被编程为iBeacon +可写BLE。 所以我可以用iBeacon发现它,并通过BLE连接到它。
我想扫描iBeacon,当我进入该区域(app在后台),并且正在调用该委托时,他将切换到BLE并使用BLE连接到该设备:
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
// here connect as usual via bluetooth
}
所以,正如我所说,我可以分别编写/发现硬件,但是当我尝试连接到模块时,通过BLE从代理(当应用程序在后台时,我进入区域,委托是ON,比在后台试图与BLE连接, 它不起作用,虽然我可以在后台做一些区域内的其他事情,例如,连接到服务器。)
我能做些什么来实现它吗?我也试图阻止灯塔区域监控,但即便如此,他也无法从后台连接到BLE。
答案 0 :(得分:1)
要在bg中执行操作,您需要从操作系统请求时间。然后你得到一个标识符。
//identifier
@property(nonatomic, assign) UIBackgroundTaskIdentifier backgroundTaskIdentifier;
通过致电:
来请求if(!self.backgroundTaskIdentifier) {
self.backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"expired, fail, throw!!!");
@throw [NSException exceptionWithName:@"BeaconServiceKilled" reason:@"Expired in bg" userInfo:nil];
}];
}
完成后再发布
if(self.backgroundTaskIdentifier) {
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskIdentifier];
self.backgroundTaskIdentifier = 0;
}