我正在开发一个iBeacon项目,该项目要求应用程序在后台持续运行。请不要忘记这个的实用性。 iBeacon API不允许应用程序在后台持续进行搜索或接收除了进入/退出事件之外的任何其他通信(在您设置needsDisplay标志的情况下接受,但这并不像我需要它那样被动)。一旦进入特定区域,当应用程序完全背景时,您似乎无法检测到哪个信标最接近。
为了破解这项工作,我设置了几个iOS设备作为CoreBluetooth外围设备,插入并始终在应用程序可以不断“发现”。由于用于外围设备的BLE配置文件是“可连接的”,因此应用程序可以在后台无限延续,iBeacon测距可以全天使用。为了启动,我看到电池寿命减少非常少。
现在的问题是,每隔一天左右,应用程序退出并且不会被进入/退出事件唤醒,也不会被其他BLE设备在范围内唤醒。
我明白,有了像这样的hacky解决方案,肯定会有无数的问题,但对于我的生活,我无法缩小可能导致这种情况的原因。想法?
答案 0 :(得分:2)
每隔一段时间,CoreLocation将挂起并且不会报告任何新的进入/退出事件。重新启动手机通常可以解决这个问题。轶事报告的增加表明,自iOS 7.1发布以来,这可能更为常见(我在StackOverflow过去几周看到过这样的其他两个问题,我们在Radius Networks上就此问题得到了很多支持请求),但没有确凿证据证明7.1的变化会影响这一点。
编辑:在其他地方收集的其他数据显示,当这些挂起发生时,蓝牙继续正常运行,并且挂起的设备仍然可以作为iBeacon进行传输。这表明CoreLocation中的一个错误会导致定期蓝牙LE扫描以查找iBeacons停止。到目前为止,唯一已知的修复方法是重新启动受影响的手机。
这个问题非常罕见,以至于我无法确定其根本原因。这是蓝牙问题吗? CoreLocation问题?您的设置可能是找到问题的理想方法。
只要您重现此问题,我就会这样做:
启动另一个iBeacon扫描程序,如Locate for iBeacon,并为该区域内的任何iBeacons设置范围(确保配置了Proximity UUID。)你看到了吗?如果是这样,蓝牙和CoreLocation可以正常工作,因此问题可能出在您的应用上。
如果在(1)中没有看到任何iBeacons,请转到设置>蓝牙,并扫描其他附近的设备(甚至是经典的蓝牙设备)。使您的Macbook或蓝牙耳机可见,使其易于测试。如果你没有看到任何设备,那么蓝牙就会被挂断。尝试将其关闭并重新打开。
如果您在(2)中看到蓝牙设备但在(1)中没有iBeacons,那么处理CoreLocation可能会出现操作系统问题。
我有兴趣知道你所看到的。上述程序无法解决您的问题,但它可能会提供更多证据证明正在进行的操作可以解决问题。
以下是用户报告类似问题的其他问题: