如何在iOS中监控后台位置?

时间:2012-11-21 02:20:48

标签: objective-c ios gps geofencing

我正在为客户编写一个家庭自动化应用程序,当他们到达距离他们家150米的距离时,他们将打开他们的车库,打开起居室和办公室灯以及其他类似的东西。他们离开时会做相反的事情。我非常感谢地理围栏内置于iOS中,当应用程序处于前台时,该功能可以很好地运行,但是当用户关闭应用程序并且手机仍在监视地理围栏时,应用程序在事件发生时不执行任何操作。是否有一个单独的方法而不是locationManager:didEnterRegion:我应该实现我的应用程序的后台通知?这是我现在使用的代码:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    NSLog(@"Entered Region - %@", region.identifier);
    [self showRegionAlert:@"Entering Region" forRegion:region.identifier];
    [self sendCommand:true];
}

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
    NSLog(@"Exited Region - %@", region.identifier);
    [self showRegionAlert:@"Exiting Region" forRegion:region.identifier];
    [self sendCommand:false];
}

3 个答案:

答案 0 :(得分:1)

要在应用处于后台时使用位置服务,您需要更改应用的信息plist文件。可以在支持文件文件夹中找到,如下所示, YourAppName-Info.plist

将项目添加到信息属性列表,并键入必需的背景模式作为键,其类型为Array。将项目添加到该阵列,并在应用程序寄存器中输入位置更新,并输入该项目的值。

答案 1 :(得分:1)

我发现这不是问题。这一切都与应用程序处于活动状态的方式完全相同。调用相同的方法。我确保优化应用程序以进行后台启动,以便它更像是一个即时响应。我猜我做错了,或者它刚开始没有用。

答案 2 :(得分:0)

在目标设置/功能中启用BackgroundModes并启用位置更新。由于应用程序处于后台,您将没有多少时间进行处理,应用程序将进入睡眠模式。使用expirationHandler使应用程序处于活动状态一段时间以进行大型处理。