2

在我的 IOS 应用程序中,我正在实施地理围栏。在当前的实现中,我使用这样的代码:

  CLRegion* region3 = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:100 identifier:@"region3"];
[self.locationManager startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyHundredMeters];

然后我使用这些委托方法:

 (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{
        NSLog(@"didenterregion");

    }
    (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region{
        NSLog(@"didexitregion");
    }

    (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
    {NSLog(@"monitoringDidFailForRegion");}

但是,此代码仅适用于大于 100m 的半径。

这里有一些问题:

  1. Apple 表示,在 ios6 及更高版本中,4s 及更高版本的设备支持 1 到 400m 之间的半径。因为我不在乎查看消息需要多长时间(就像我在进入该区域时不关心看到消息,但如果我曾经从该区域经过,我确实关心在后者看到)我可以使用更小的半径?我对半径 50m 或更小的东西感兴趣?(在某些地区,我的情况甚至需要 20m)。

我也有这样的想法。苹果表示最多可以支持 20 个地区。像这样的解决方案有什么优点/缺点(我还没有实现它,但我想要你的意见)。

伪代码将是这样的:

Declare the regions - save them in an array
Do not call start monitoring

然后在委托方法中:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
      for loop in all my regions {
         if ([region containsCoordinate: newLocation.coordinate])
            code for entering region
      } 
}
  1. 会不会慢一些?
  2. 它会消耗更多的电池吗?(我认为区域监控不消耗电池)?
  3. 可以更准确吗?
  4. 由于我没有注册监视器,我可以拥有超过 20 个区域吗?

提前致谢。

4

1 回答 1

5

1.

我怀疑第二个(didUpdateToLocation:基于 - 的)实现会比第一个实现更昂贵(就电池寿命而言),这仅仅是因为startMonitoringForRegion:当且仅当设备在您正在跟踪的(最多 20 个)区域之一的半径。

而在第二个实现中,代码必须在每次“ didUpdateToLocation:”委托调用时运行(这将经常发生),然后委托方法中的代码将运行。

顺便说一句,您说代码在半径为 100m 以上的情况下工作正常,但苹果文档说它应该在 iOS6 中工作,“4s 及以上的设备支持半径在 1 到 400m 之间”。

您的“100m”数字是您的实际结果还是您使用的设备的限制(比 iPhone 4s 或旧 iOS 版本更旧的设备)?

2.

在后台执行任何操作确实会消耗电池电量,但 Apple 已经为此优化了 CoreLocation前提是您在应用程序的 info.plist 文件中设置了正确的标志

3.

我认为两者的准确性都差不多,除了“startMonitoringForRegion:”可能需要几分钟的时间来报告该区域已进入或退出

4.

是的,在第二个实现中,您可以拥有想要跟踪的任意数量的区域。但是,您在后台运行的代码越多,电池越热,您就越有可能更快地耗尽电池电量。

于 2013-09-08T00:55:32.400 回答