Ios 从iBeacon实时切换到BLE?

Ios 从iBeacon实时切换到BLE?,ios,bluetooth-lowenergy,core-bluetooth,ibeacon,Ios,Bluetooth Lowenergy,Core Bluetooth,Ibeacon,我们的信标硬件编程为iBeacon+可写。 所以我可以用iBeacon发现它,也可以通过BLE连接到它 我想扫描iBeacon,当我进入该区域(应用程序位于后台)并调用代理时,他将切换到BLE并使用BLE连接到设备: - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { // here connect as usual via bluetooth } 因此,正如我

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

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

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    // here connect as usual via bluetooth
}
因此,正如我所说,我可以单独写入/发现硬件,但当我尝试通过BLE从代理连接到模块时(当应用程序在后台时,我进入区域,代理打开,而不是在后台尝试连接BLE, 它不起作用,尽管我可以在后台在区域内做其他事情,例如连接到服务器。)


我能做些什么让它发生吗?我还试图停止信标区域监视,但即使如此,他也无法从后台连接到BLE。

要在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;
}

你是否在info.plisties中设置了背景模式键,所有这些。问题似乎是应用程序只会唤醒10秒钟,而BLE没有足够的时间连接。。你能从系统中获得更多的时间吗?谢谢,我不知道如何使用它。。此代码指向何处,以及我连接到BLE的位置?启动BLE连接时,属性将进入接口和请求。当你完成了所有的事情。。。也许当你离开这个地区的时候?非常感谢,有几件事,首先,我是把BLE连接放在你写的块之前,还是放在它里面?第二,这是苹果允许的吗?这需要一些用户权限吗?你能有多少时间?似乎很奇怪,苹果允许这样做,因为我可以让它永远做事情。好吧,谢谢它的工作,它给你更多的时间,但BLE不会连接在后台,只有在前台。。不能让它那样做。。