RegionMonitoring监控的“区域”数,基于用户在iOS7中的当前位置

时间:2014-02-18 10:15:35

标签: ios mapkit core-location geofencing region-monitoring

我正在开展这样一个应用程序执行以下操作的项目:

  1. 用户选择一个半径(10米到1000米),然后按“开始”按钮转到下一个viewController
  2. 此处应用程序抓取用户当前位置并根据具有所选半径的当前位置启动“区域监控”
  3. 如果用户越过某个边界(10米到1000米),则会发出“ExitRegion”警告消息。并根据用户新的当前位置再次启动“区域监控”。应用程序一直在这样做,包括前台和后台模式。我设法做到了&它工作得很好。
  4. 现在,我在这里监视一个区域,然后再监视另一个区域。所以数字实际上就是一个。但是我知道一个应用程序可以通过“区域监控”监控的区域的最大数量是15.现在我的问题是在这种情况下我应该处理这个最大数量的区域问题吗?如果是,那怎么办?

    我想补充的另一件事是,它有一些解决方案,只适用于iOS 6及更早版本。所以请根据用户在iOS7中的当前位置,通过“RegionMonitoring”监控“区域”处理数量的解决方案让我知道。

    如果我能给出答案或任何建议来完成我的应用程序所需的要求,我将非常高兴。

1 个答案:

答案 0 :(得分:6)

如果检查文档,则最大限制为20.当超过此数字时,iOS将释放对最旧区域的监视(将其视为FIFO队列)。确保半径小于maximumRegionMonitoringDistance。换句话说,您不必担心最大限制,您可以通过实施didStartMonitoringForRegion:委托确保这一点。

但是,如果要控制自己监控的区域数量,可以始终使用stopMonitoringForRegion:停止监控区域。您可以使用属性monitoredRegions获取受监控区域的列表。您可以随时清理不再需要的区域。保持最小化是一个很好的做法,因为它会影响电池和应用程序的性能。

我正在使用以下代码在需要时清理所有区域。

for (CLCircularRegion *region in self.locationManager.monitoredRegions) {
    [self.locationManager stopMonitoringForRegion:region];
}

但是,在你的情况下,我建议使用一个常数区域标识符(例如“MY-区”),因为不能监视与同一个标识符的两个区域,添加其他区域具有相同id删除以前自动监视区域。

CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:coordinate radius:50.0f identifier:@"MY-REGION"];
[self.locationManager startMonitoringForRegion:region];