我正在开发一款用于监控iBeacons的iOS应用。它在前景和后台都很好用。即使屏幕关闭,我也需要它来保持监控。现在我的问题是,当我用肩膀按钮关闭屏幕时,NSLog显示iBeacon信号相应地关闭(RSSI = 0,beacon.accuracy = -1.0),10秒后,根本没有找到信标,而委托方法locationManager:didRangeBeacons:inRegion:被连续调用。当屏幕关闭时,应用程序似乎正在运行,但iOS会关闭iBeacon测距的位置服务。我试着设置“locationManager.pausesLocationUpdatesAutomatically = NO;”但仍然无法正常工作。关于这个问题有什么建议吗?提前谢谢。
答案 0 :(得分:1)
您似乎正在进行范围而不是监控。范围仅在应用程序处于活动状态时才有效 - 无论是在前台还是在后台。问题是,iOS将在您远离它后自动将应用程序暂停几秒钟,或者锁定屏幕。
你必须记住的是,iOS上真的没有“永久背景状态”这样的东西。应用程序在后台运行一段有限的时间,同时转换到暂停状态(让它们,例如,完成上传/下载),还有背景模式有时允许应用程序在后台运行,但这些通常是保留的对于非常特定的应用程序 - 例如,“音频”背景模式意味着应用程序可以在后台运行,只要它播放音乐等。有“位置”服务的背景模式,但它保留用于转换 - 转动导航应用程序。
Beacon 监控然而,即使您的应用程序进入休眠状态,也会继续运行,或者由于内存压力而被iOS终止。当您进入或离开信标范围时,iOS会将您的应用程序启动到后台以处理事件,给它几秒钟(您可以延长几分钟并使用Background Execution Task)来完成所以(你可以在那个时间范围内),但它又回到了睡眠状态。
您可能还想看看这个问题:
Receive signal from beacon while app is in the background