iOS – closuresWiFi的地理围栏

我有代码,在我的iPhone上创build一个地理围栏,将触发didExitRegion被调用时执行一些代码。 但是,我发现,当我closuresWiFi时,didExitRegion永远不会被触发。 在iOS上监控区域更改是否需要WiFi? 我期望的精确度设置为kCLLocationAccuracyHundredMeters。 我正在testingiOS 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; } 

谢谢

iOS设备使用三种方法来发现用户位置。 从(通常)最准确到最不准确的是:

  1. GPS硬件
  2. 通过识别附近的wifinetworking
  3. 细胞塔三angular测量

如果您的应用程序不使用GPS或未运行(即以前已终止),则设备将尝试使用上述方法2和3来定位用户。 因此,设备定位用户的能力(当GPS硬件未被使用或者GPS信号较弱时)取决于WiFinetworking和蜂窝塔的可用性。 无线networking和蜂窝塔越多,定位精度就越好。 因此,当用户进入或退出监控区域(即跨越“地理围栏”)时,无法准确预测用户何时将接收到通知。 (当然,如果所涉及的区域总是相同的,则设备将或多或less地以相同程度的精度定位用户)。

以下是位置感知编程指南的相关文档:

特定的阈值距离由当前可用的硬件和位置技术确定。 例如,如果Wi-Fi已禁用,则区域监视的准确性将大大降低。 但是,出于testing目的,您可以假设最小距离大约为200米。

因此,区域监控工作不需要使用wifi,但是启用该function后,您的设备将有更好的机会确定用户是否跨区域的地理围栏。

如果您closuresWiFi,您的位置准确性会降低。 如果你没有GPS信号(在一些build筑物内),你将不会得到任何位置更新。 当你在外面,或者如果你使用位置模拟器来testing,你有没有试过?

另外,如果你有GPS(iPhone或iPad的SIM卡),WiFI不需要地理栅栏function。

怪异的奇怪的东西可以发生没有使用核心位置的无线networking。 为了帮助你的情况,我会摆脱距离filter,可以搅乱的东西,这不是很有帮助。 我可能只会使用kCLLocationAccuracyBest来处理任何需要设置地理围栏所需的准确性的地方。 对我来说,使用其他精度和滤波器有时会通过1000米的GPS测量仪,花费一两分钟的时间来纠正自己。 如果电池电量太多,请根据离围墙有多远build立一个closures和打开的系统。