(45 units)
是否可以在睡眠状态下接收(70 units)
数据包并唤醒应用程序?
我杀死了一个应用程序并重新启动,然后将手机置于睡眠模式。重新启动设备时,该设备位于信标区域,重新启动后我保持设备屏幕关闭。
我的iOS
应用未唤醒,因此我怀疑它没有收到iBeacon
数据包。
我检查了系统日志,发现没有调用iOS
过程。
在强制终止应用程序的情况下,应用唤醒可以工作吗?iBeacon
是否在重启和立即进入睡眠状态时收到didEnterRegion
数据包?
如果我打开屏幕,它将立即开始工作,但是如果屏幕在重启后关闭,则不会收到iOS
数据包。
答案 0 :(得分:1)
是的,iOS CoreLocation会在区域入口或区域出口启动您的应用程序,即使在iOS 7.1.1之后强制终止后仍能正常运行。如果您在AppDelegate的CLLocationManagerDelegate
方法中设置了didFinishLaunchingWithOptions
,则只会得到适当的回调。如果您未在该方法中进行设置,则CoreLocation将不知道在应用启动后进行回调。
在应用重新启动期间测试进入事件可能会有些棘手,因此这里有一些避免陷阱的提示:
如果至关重要,则您的应用程序会认为它在上次运行时位于该区域之外。如果它在上次运行时位于该区域“内部”,则它不一定会获得另一个条目回调,因为它将认为它永远不会离开。在测试时,请绝对确保在退出{strong>之前,您杀死了该应用程序或重新启动,得到了didExit
回调或didDetermineState
回调,该回调表明它不在区域中。使用NSLog
语句,本地通知或添加到应用程序屏幕的一些自定义UI指示器来对此进行验证。
如果您重新启动iOS设备,CoreLocation不会立即完全初始化-我已经看到屏幕打开后需要5分钟才能收到任何回调。确保等待足够长的时间。
一旦CoreLocation被完全初始化,区域进入事件通常在信标进入范围后的一秒钟内发生。但是,如果有限的蓝牙硬件辅助模式插槽在设备上已全部装满(通常,如果您还有其他几个都使用了它们的信标应用程序,则会发生这种情况),则进入事件会退回到仅每10分钟或更多。在这种情况下,进入事件可能需要花费很长时间。确保等待足够长的时间,然后再假设它不起作用。