实时从iBeacon切换到BLE?

时间:2014-11-24 13:15:20

标签: ios bluetooth-lowenergy core-bluetooth ibeacon

我们的信标硬件被编程为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。

1 个答案:

答案 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;
}