3

据称,在 iOS 中,即使应用程序未启动,也可以使用CLLocationManager'方法注册代表以响应设备移动到特定地理区域的情况。startMonitoringForRegion:CLLocationManager 类参考

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

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

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

1 回答 1

1

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

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

如果我们决定在进入该区域后确实要将应用程序置于前台,我们将如何做到这一点?

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

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

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

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

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

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

于 2012-10-09T14:35:35.283 回答