我的代码在我的iPhone上创建了一个地理围栏,它会在调用didExitRegion时触发一些代码。但是,我发现当我关闭WiFi时,didExitRegion永远不会被触发。 是否需要WiFi来监控iOS上的区域变化? 我想要的准确度设置为kCLLocationAccuracyHundredMeters。 我正在测试iOS 6.1和iPhone 4。
以下是我设置位置监控的代码:
- (id)init {
self = [super init];
if (self) {
CLLocationManager *manager = [[CLLocationManager alloc] init];
manager.delegate = self;
manager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
manager.distanceFilter = RADIUS/10.0;
manager.headingFilter = kCLHeadingFilterNone;
self.locationManager = manager;
self.authorizationStatus = [CLLocationManager authorizationStatus];
}
return self;
}
由于
答案 0 :(得分:11)
iOS设备使用三种方法来发现用户位置。从(通常)最准确到最不准确,它们是:
如果您的应用不使用GPS或未运行(即先前已经终止),设备将尝试使用上述方法2和3来定位用户。因此,设备定位用户的能力(当GPS硬件未使用或GPS信号较弱时)取决于wifi网络和手机信号塔的可用性。 wifi网络和蜂窝塔越多,定位精度越高。因此,当用户进入或离开被监视区域(即,穿过“地理围栏”)时,如果有的话,则不可能准确地预测用户何时将接收到通知。 (当然,如果所涉及的区域始终相同,则设备将在每种情况下或多或少地以相同的准确度定位用户。)
以下是Location Awareness Programming Guide的相关文档:
特定阈值距离由当前可用的硬件和定位技术决定。例如,如果禁用Wi-Fi,则区域监控的准确性要低得多。但是,出于测试目的,您可以假设最小距离约为200米。
因此,区域监控不需要wifi工作,但启用后,您的设备将有更好的机会确定用户是否已跨越区域的地理围栏。
答案 1 :(得分:2)
如果您关闭WiFi,您的位置准确度会降低。如果您没有GPS信号(在某些建筑物内),您将无法获得任何位置更新。您是否在室外时尝试过此操作,或者您是否使用了位置模拟器进行测试?
此外,如果你有GPS(带有SIM卡的iPhone或iPad),地理围栏功能不需要WiFI。
答案 2 :(得分:2)
如果没有使用核心位置的wifi,可能会发生奇怪的奇怪事情。为了帮助你的情况,我会摆脱距离过滤器,这可能会弄乱事情,这不是很有帮助。我可能只会将kCLLocationAccuracyBest用于需要设置地理围栏所需精度的任何地方。对我来说,使用其他精度和滤波器有时会通过gps仪表关闭1000米并需要一两分钟来纠正自己。如果这是太多的电池,那么根据距离栅栏的距离设置一个关闭和打开的系统。