iOS - 关闭WiFi的地理围栏

时间:2013-04-08 16:31:27

标签: iphone ios geolocation wifi geofencing

我的代码在我的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;
}

由于

3 个答案:

答案 0 :(得分:11)

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

  1. GPS硬件
  2. 通过识别附近的无线网络
  3. Cell Tower Triangulation
  4. 如果您的应用不使用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米并需要一两分钟来纠正自己。如果这是太多的电池,那么根据距离栅栏的距离设置一个关闭和打开的系统。