在iOS中,可以据称使用CLLocationManager
的{{1}}方法来注册代理,以响应移动到特定地理区域的设备,即使应用程序未启动也是如此。来自CLLocationManager Class Reference:
在iOS中,您在位置管理器中注册的区域会在启动应用程序之间保持不变。如果在您的iOS应用未运行时发生区域交叉,系统会自动将其唤醒(或重新启动),以便它可以处理该事件。重新启动时,您之前配置的所有区域都可以在您创建的任何位置管理器对象的monitoredRegions属性中使用。
我认为如果应用程序重新启动,iOS实际上并没有将它带到前台。我找不到任何好的示例说明startMonitoringForRegion:
在整个应用程序中的位置,所以我的问题是:
startMonitoringForRegion
的委托?我猜测如果我们在没有将应用程序带入前台的情况下启动应用程序,它就无法在视图控制器中进行操作。有人能举例说明一些背景吗?startMonitoringForRegion
注册操作系统的时间是什么时候注册?用户是否必须至少启动一次应用程序(即使它已被杀死)才能进行初始注册?如果用户关闭设备怎么办?我们的处理程序是否会在下次启动设备时注册,或者用户是否必须至少再次启动应用程序?答案 0 :(得分:1)
是否必须从特定的某个位置注册startMonitoringForRegion的委托?我猜测如果我们在没有将应用程序放到前台的情况下启动应用程序,就无法在视图控制器中进行操作。
假。如果已经分配初始化了视图控制器对象确实,即使其内容未显示也是如此。
如果我们确定我们确实希望在进入该地区后将应用程序置于前台,我们将如何做到这一点?
使用公共API是不可能的(我不确定后台的应用程序是否可以使用- [UIApplication openURL:]
使用自己的URL方案将自己置于后台,但我对此表示怀疑);但是您可以使用SpringBoardServices框架来启动您的应用程序:
SBSLaunchApplicationWithIdentifier(CFSTR("com.mycompany.theBestiPhoneAppEver"), false);
何时在操作系统中注册了startMonitoringForRegion,何时注销?用户是否必须至少启动一次应用程序(即使它已被杀死)才能进行初始注册?
如果用户从不运行您的应用程序,则内部代码将永远不会运行,因此不会注册。
如果用户关闭设备电源怎么办?我们的处理程序是否会在下次启动设备时注册,或者用户是否必须至少再次启动应用程序?
现在这是一个很好的问题。我不知道它在我的头脑中,也没有在文档中找到答案(可能你也没有找到),所以我想你最好自己尝试一下来确定。