在我的 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 的半径。
这里有一些问题:
- 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
}
}
- 会不会慢一些?
- 它会消耗更多的电池吗?(我认为区域监控不消耗电池)?
- 可以更准确吗?
- 由于我没有注册监视器,我可以拥有超过 20 个区域吗?
提前致谢。