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?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7.1 iBeacon 监控更新对云台有何影响?

屏幕关闭时的 iBeacon 事件

iOS 7-iBeacon:当应用程序关闭时,如何从 iBeacon 获取比其 UUID 更多的数据?

设备重启后的 IOS8 iBeacon 监控

当两个应用监控同一个 iBeacon 区域时会发生啥?

如何在后台应用程序和iphone重启时使用ibeacon[关闭]