【发布时间】:2012-10-09 14:29:11
【问题描述】:
在 iOS 中,据称可以使用CLLocationManager 的startMonitoringForRegion: 方法注册一个代理以响应设备移动到特定地理区域,即使应用程序未启动。来自CLLocationManager Class Reference:
在 iOS 中,您向位置管理器注册的区域会在应用程序启动之间保持不变。如果在您的 iOS 应用程序未运行时发生跨区域,系统会在后台自动将其唤醒(或重新启动),以便处理该事件。重新启动后,您之前配置的所有区域都会在您创建的任何位置管理器对象的受监控区域属性中可用。
我假设如果应用程序重新启动,iOS 实际上并没有将它带到前台。我找不到任何好的示例来说明 startMonitoringForRegion 适合整个应用程序的位置,所以我的问题是:
- 是否必须从某个特定的地方为
startMonitoringForRegion注册代表?我猜如果我们在启动应用程序时不将其置于前台,它就不能在视图控制器中进行。有人可以举个例子吗? - 如果我们决定我们确实想要将应用程序置于前台作为进入该区域的结果,我们将如何做到这一点?
-
startMonitoringForRegion何时注册到操作系统,何时取消注册?用户是否必须至少启动一次应用程序(即使它已经被杀死)才能进行初始注册?如果用户关闭设备电源怎么办?我们的处理程序会在设备下次开机时注册,还是用户必须至少再次启动应用?
【问题讨论】:
-
类引用的意思是应用程序将被重新启动,并且在 applicationDidFinishLaunching:option 中,选项将包含键 'UIApplicationLaunchOptionsLocationKey' 以指示应用程序由于检测到 didEnterRegion/didExitRegion 监控区域而重新启动。如果检测到密钥,则需要重新初始化位置管理器和代理,然后才能在代理内部进行任何处理。
标签: objective-c geolocation cllocationmanager lifecycle