IOS Developpement:背景BLE扫描

时间:2015-11-26 16:31:14

标签: ios objective-c background bluetooth

我目前正在尝试开发与背景蓝牙相关的应用,而且我在后台扫描时遇到了一些问题。

我遵循了整个Apple IOS蓝牙背景教程,但我无法弄清楚为什么扫描不能在后台工作(我的info.plist正确设置为管理BLE后台任务,包括中央和外围)。

到目前为止我测试的内容:

1 - 当我的两个设备在范围内和前景中时,扫描效果很好。

2 - 当外围设备处于后台,并且中央在前景中激活时,扫描也起作用,外围设备被很好地检测到。

麻烦来了

3 - 首先我启动外围设备,然后将应用程序置于后台。然后在外围设备上,我关闭蓝牙电源,我启动应用程序,我把它放在后台,然后打开蓝牙电源。 在我的代码中,-(void)centralManagerDidUpdateState:(CBCentralManager *)central调用扫描[centralmgr scanForPeripheralsWithServices:[NSArray arrayWithObject:servicesUUID] options:scanOptions];,该函数在前台完美运行。但没有任何事情发生,中心从未发现外围设备。

4 - 我启动了中央,蓝牙激活,我把它放在后台。然后我拿走了我的外围设备,我走出了蓝牙系列(在特定的情况下,我去了我的超市买了一些啤酒来淹没我的悲伤),我在那里启动它 - 还有蓝牙激活 - 我把它放在后台,然后我回到了我的外围设备附近。再一次没有发生任何事情,中央部队没有发现外围设备。

此外,在案例3和4之后,如果我只是将中央放在前台(外围设备保持在后台),检测重启,而不做任何其他事情。好像在案例4中成功触发扫描,但等待应用程序激活以实际开始检测其他设备。

有人知道如何处理/克服这个问题吗?

谢谢!

Ps:我为我的英语道歉,我有点生气

1 个答案:

答案 0 :(得分:1)

您好了解详细信息,您可以看到answer

但简短的回答是您的某个应用必须在前台才能相互连接 您的中央设备或外围设备

原因:对于您来说只扫描提供外设的服务UUID

并且在后台,外围设备无法对其UUID进行广告宣传 所以即使他们在那里,他们也不知道彼此的存在

此外,有关背景扫描的一些值得注意的事情是

您应该知道,当您的应用处于后台时,广告的运营方式与您的应用位于前台时的运营方式不同。特别是,当您的应用在后台广告时:

忽略CBAdvertisementDataLocalNameKey广告密钥,并且不公布外围设备的本地名称。

CBAdvertisementDataServiceUUIDsKey广告密钥的值中包含的所有服务UUID都放在一个特殊的“溢出”区域中;它们只能由明确扫描它们的iOS设备发现。

如果所有宣传的应用都在后台,则外围设备发送广告包的频率可能会降低。

See Apple Docs