IOS Developpement:背景BLE扫描

我目前正在试图开发一个背景蓝牙相关的应用程序,我在后台扫描有一些麻烦。

我跟着整个苹果IOS蓝牙背景教程,但我不知道为什么扫描不能在后台工作(我的info.plist正确设置pipe理BLE后台任务,中央和外围)。

到目前为止我所testing的是:

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

2 – 当外围设备在后台,中央在前台激活时,扫描也可以正常工作,外围设备可以检测到。

麻烦来了

3 – 首先启动我的外围设备,然后将应用程序置于后台。 然后在外围设备上,我closures蓝牙 ,启动应用程序,我把它放在后台,然后打开蓝牙。 在我的代码中, -(void)centralManagerDidUpdateState:(CBCentralManager *)central调用扫描[centralmgr scanForPeripheralsWithServices:[NSArray arrayWithObject:servicesUUID] options:scanOptions]; ,在前台完美运行的function。 但是什么都没有发生,外围设备从未被中央检测到。

4 – 我启动中央,蓝牙激活,我把它放在后台。 然后,我把我的外围设备,我走出了蓝牙范围(在具体情况下,我去我的超市买了一些啤酒淹死我的悲伤) ,我在那里启动 – 也蓝牙激活 – 我把它放在背景和我回到我周边的附近。 再一次没有发生,中央没有检测到外围设备。

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

有人对如何解决问题有所了解吗?

谢谢!

诗:我为我的英语道歉,我有点生疏

嗨详情你可以看到这个答案

但简短的答案是你的应用程序必须在前台互相连接你的中央设备或外围设备之一

原因:只能提供外设的服务UUID

而在后台,一个外围设备不能支持它的UUID,所以即使他们在那里,他们也不知道对方的存在

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

你应该知道,当你的应用程序在后台进行广告的操作与当你的应用程序处于前台的时候有所不同。 特别是,当你的应用程序在后台进行广告时:

CBAdvertisementDataLocalNameKey通告密钥被忽略,外设的本地名称不被公布。

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

如果所有正在进行广告的应用程序都在后台,则外围设备发送广告数据包的频率可能会降低。

请参阅Apple文档