1

我目前正在为客户编写一个家庭自动化应用程序,当他们到达距离他们家 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];
}
4

3 回答 3

1

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

于 2012-11-22T01:34:53.757 回答
1

要在您的应用处于后台时使用定位服务,您需要更改应用的 info plist 文件。应该在Supporting Files 文件夹中找到,如下所示,YourAppName-Info.plist

在信息属性列表中添加一个项目并键入Required Background Modes作为键,它的类型是Array。将一个项目添加到该数组并输入App registers 以将位置更新为该项目的值。

于 2012-11-21T03:00:09.367 回答
0

在 Target Settings/Capabilities 中打开 BackgroundModes 并启用位置更新。由于应用程序处于后台,您将几乎没有时间进行处理,应用程序将进入睡眠模式。使用 expireHandler 使应用程序活动一段时间以进行大型处理。

于 2016-03-19T14:52:58.840 回答