iOS屏幕关闭时如何继续监控iBeacon?
Posted
技术标签:
【中文标题】iOS屏幕关闭时如何继续监控iBeacon?【英文标题】:How to continue monitoring iBeacon when screen is off in iOS? 【发布时间】:2015-12-26 07:56:36 【问题描述】:我正在开发一个 ios 应用程序来监控 iBeacons。它在前台和后台都运行良好。即使屏幕关闭,我也需要它来保持监控。现在我的问题是,当我用肩膀按钮关闭屏幕时,NSLog 显示 iBeacon 信号相应关闭(RSSI=0,beacon.accuracy=-1.0),10 秒后,根本没有找到信标,而委托方法 locationManager:didRangeBeacons:inRegion: 被连续调用。屏幕关闭时似乎应用程序正在运行,但 iOS 关闭了 iBeacon 测距的定位服务。我试图设置“locationManager.pausesLocationUpdatesAutomatically = NO;”但仍然无法正常工作。对这个问题有什么建议吗?提前致谢。
【问题讨论】:
尝试设置这个 locationManager.allowsBackgroundLocationUpdates = YES;这是 iOS 9 所必需的 这听起来不正常。你能在第二台 iOS 设备上重现这种行为吗? 我试过“locationManager.allowsBackgroundLocationUpdates = YES;”刚刚,还是不行。我设备上的 iOS 版本是 9.2。 是的,iPhone 5s、6、6plus 的行为都是一样的。所以我想我应该错过了一些复活节彩蛋。 【参考方案1】:您似乎在进行测距而不是监控。测距仅在应用程序处于活动状态时才有效 - 无论是在前台还是在后台。问题是,iOS 会在您离开应用程序几秒钟后自动进入睡眠状态,或者锁定屏幕。
您必须记住的是,iOS 上确实没有“永久背景状态”这样的东西。应用程序在过渡到暂停状态时在后台运行一段有限的时间(让它们完成上传/下载),还有一些后台模式有时可以让应用程序在后台运行,但这些通常是保留的对于非常特定的应用程序——例如,“音频”后台模式意味着应用程序可以在后台运行,只要它播放音乐等。“位置”服务有一个后台模式,但它是为轮流保留的打开导航应用程序。
Beacon monitoring 但是,即使您的应用程序进入睡眠状态或由于内存压力而被 iOS 终止,它也会继续运行。当您进入或超出信标范围时,iOS 会将您的应用程序启动到后台以处理该事件,并给它几秒钟(您可以使用 Background Execution Task 延长至几分钟)来执行此操作(你可以在那段时间范围内),但然后它又回到睡眠状态。
您可能还想看看这个问题:Receive signal from beacon while app is in the background
【讨论】:
以上是关于iOS屏幕关闭时如何继续监控iBeacon?的主要内容,如果未能解决你的问题,请参考以下文章