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