实时从 iBeacon 切换到 BLE?
Posted
技术标签:
【中文标题】实时从 iBeacon 切换到 BLE?【英文标题】:Switching from iBeacon to BLE in real time? 【发布时间】:2014-11-24 13:15:20 【问题描述】:我们的信标硬件被编程为 iBeacon + 可写 BLE。 所以我可以用 iBeacon 发现它,也可以通过 BLE 连接到它。
我想扫描 iBeacon,当我进入该区域时(应用程序在后台),并且正在调用代理,他将切换到 BLE 并使用 BLE 连接到设备:
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
// here connect as usual via bluetooth
所以,正如我所说,我可以单独编写/发现硬件,但是当我尝试通过 BLE 从委托连接到模块时(当应用程序在后台时,我进入该区域,委托开启,而不是在后台尝试连接 BLE, 它不工作,虽然我可以在一个区域内在后台做其他事情,例如,连接到服务器。)
我能做些什么来实现它吗?我也试图停止信标区域监控,但即便如此,他也无法从后台连接到 BLE。
【问题讨论】:
你有没有在info.plist中设置了后台模式键 是的,所有这些。似乎问题是应用程序只唤醒了 10 秒,而 BLE 没有足够的时间进行连接。你能从系统中获得更多时间吗? 【参考方案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;
【讨论】:
谢谢,我不明白如何使用它.. 这段代码的去向,以及我连接到 BLE 的位置? 启动BLE连接时,该属性进入界面和请求。当你完成所有事情时……也许当你离开这个地区时? 非常感谢,有几件事,首先,我是把BLE连接放在你写的块之前,还是里面?第二,这是苹果允许的吗?这需要一些用户权限吗?你能得到多少时间?苹果允许这样做似乎很奇怪,因为我可以让它永远做事.. 好吧,谢谢它的工作,它给了你更多的时间,但是 BLE 不会在后台连接,只能在前台.. 不能设置它来做到这一点..以上是关于实时从 iBeacon 切换到 BLE?的主要内容,如果未能解决你的问题,请参考以下文章