从iBeacon实时切换到BLE?

我们的信标硬件被编程为iBeacon +可写BLE。 所以我可以用iBeacon发现它,并通过BLE连接到它。

我想扫描iBeacon,当我进入区域(应用程序在后台),并且正在调用代理时,他将切换到BLE并使用BLE连接到设备:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { // here connect as usual via bluetooth } 

所以,正如我所说,我可以单独编写/发现硬件,但是当我试图连接到模块,从委托通过BLE(当应用程序在背景中,我进入该地区,委托是在后台尝试与BLE连接,它不工作,虽然我可以在后台做一些区域内的其他事情,例如,连接到服务器。)

有什么我可以做到这一点吗? 我也试图停止灯塔区域监视,但即使如此,他也无法从背景连接到BLE。

在BG中做东西,你需要从OS请求时间。 你然后得到一个标识符。

 //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; }