【问题标题】:iOS app lifecycle regarding CLLocationManager startMonitoringForRegion关于 CLLocationManager startMonitoringForRegion 的 iOS 应用生命周期
【发布时间】:2012-10-09 14:29:11
【问题描述】:

在 iOS 中,据称可以使用CLLocationManagerstartMonitoringForRegion: 方法注册一个代理以响应设备移动到特定地理区域,即使应用程序未启动。来自CLLocationManager Class Reference

在 iOS 中,您向位置管理器注册的区域会在应用程序启动之间保持不变。如果在您的 iOS 应用程序未运行时发生跨区域,系统会在后台自动将其唤醒(或重新启动),以便处理该事件。重新启动后,您之前配置的所有区域都会在您创建的任何位置管理器对象的受监控区域属性中可用。

我假设如果应用程序重新启动,iOS 实际上并没有将它带到前台。我找不到任何好的示例来说明 startMonitoringForRegion 适合整个应用程序的位置,所以我的问题是:

  1. 是否必须从某个特定的地方为startMonitoringForRegion 注册代表?我猜如果我们在启动应用程序时不将其置于前台,它就不能在视图控制器中进行。有人可以举个例子吗?
  2. 如果我们决定我们确实想要将应用程序置于前台作为进入该区域的结果,我们将如何做到这一点?
  3. startMonitoringForRegion 何时注册到操作系统,何时取消注册?用户是否必须至少启动一次应用程序(即使它已经被杀死)才能进行初始注册?如果用户关闭设备电源怎么办?我们的处理程序会在设备下次开机时注册,还是用户必须至少再次启动应用?

【问题讨论】:

  • 类引用的意思是应用程序将被重新启动,并且在 applicationDidFinishLaunching:option 中,选项将包含键 'UIApplicationLaunchOptionsLocationKey' 以指示应用程序由于检测到 didEnterRegion/didExitRegion 监控区域而重新启动。如果检测到密钥,则需要重新初始化位置管理器和代理,然后才能在代理内部进行任何处理。

标签: objective-c geolocation cllocationmanager lifecycle


【解决方案1】:

是否必须从某个特定的地方注册 startMonitoringForRegion 的委托?我猜如果我们在启动应用程序时不将其置于前台,它就不能在视图控制器中被插入。

错误。一个视图控制器对象仍然确实存在,如果它被分配初始化,即使它的内容没有呈现。

如果我们决定在进入该区域后将应用程序置于前台,我们将如何做?

无法使用公共 API(我不确定后台应用是否可以使用 - [UIApplication openURL:] 和自己的 URL 方案将自己带入后台,但我对此表示怀疑);但是您可以使用 SpringBoardServices 框架来启动您的应用程序:

SBSLaunchApplicationWithIdentifier(CFSTR("com.mycompany.theBestiPhoneAppEver"), false);

startMonitoringForRegion 何时向操作系统注册,何时取消注册?用户是否必须至少启动一次应用程序(即使它已经被杀死)才能进行初始注册?

如果用户从不运行您的应用程序,则其中的代码将永远不会运行,因此不会被注册。

如果用户关闭设备电源怎么办?我们的处理程序会在设备下次开机时注册,还是用户必须至少再次启动应用程序?

这是一个很好的问题。我不知道它是什么,我也没有在文档中找到答案(可能你也没有找到),所以我想说你最好自己尝试一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多