我目前正在尝试开发与背景蓝牙相关的应用,而且我在后台扫描时遇到了一些问题。
我遵循了整个Apple IOS蓝牙背景教程,但我无法弄清楚为什么扫描不能在后台工作(我的info.plist正确设置为管理BLE后台任务,包括中央和外围)。
到目前为止我测试的内容:
1 - 当我的两个设备在范围内和前景中时,扫描效果很好。
2 - 当外围设备处于后台,并且中央在前景中激活时,扫描也起作用,外围设备被很好地检测到。
麻烦来了
3 - 首先我启动外围设备,然后将应用程序置于后台。然后在外围设备上,我关闭蓝牙电源,我启动应用程序,我把它放在后台,然后打开蓝牙电源。
在我的代码中,-(void)centralManagerDidUpdateState:(CBCentralManager *)central
调用扫描[centralmgr scanForPeripheralsWithServices:[NSArray arrayWithObject:servicesUUID] options:scanOptions];
,该函数在前台完美运行。但没有任何事情发生,中心从未发现外围设备。
4 - 我启动了中央,蓝牙激活,我把它放在后台。然后我拿走了我的外围设备,我走出了蓝牙系列(在特定的情况下,我去了我的超市买了一些啤酒来淹没我的悲伤),我在那里启动它 - 还有蓝牙激活 - 我把它放在后台,然后我回到了我的外围设备附近。再一次没有发生任何事情,中央部队没有发现外围设备。
此外,在案例3和4之后,如果我只是将中央放在前台(外围设备保持在后台),检测重启,而不做任何其他事情。好像在案例4中成功触发扫描,但等待应用程序激活以实际开始检测其他设备。
有人知道如何处理/克服这个问题吗?
谢谢!
Ps:我为我的英语道歉,我有点生气
答案 0 :(得分:1)
您好了解详细信息,您可以看到answer
但简短的回答是您的某个应用必须在前台才能相互连接 您的中央设备或外围设备
原因:对于您来说只扫描提供外设的服务UUID
并且在后台,外围设备无法对其UUID进行广告宣传 所以即使他们在那里,他们也不知道彼此的存在
此外,有关背景扫描的一些值得注意的事情是
您应该知道,当您的应用处于后台时,广告的运营方式与您的应用位于前台时的运营方式不同。特别是,当您的应用在后台广告时:
忽略CBAdvertisementDataLocalNameKey
广告密钥,并且不公布外围设备的本地名称。
CBAdvertisementDataServiceUUIDsKey
广告密钥的值中包含的所有服务UUID都放在一个特殊的“溢出”区域中;它们只能由明确扫描它们的iOS设备发现。
如果所有宣传的应用都在后台,则外围设备发送广告包的频率可能会降低。