6

我有在我的 iPhone 上创建地理围栏的代码,当调用 didExitRegion 时将触发一些代码执行。但是,我发现当我关闭 WiFi 时,didExitRegion 永远不会被触发。在 iOS 上监控区域变化是否需要 WiFi?我想要的精度设置为 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;
}

谢谢

4

3 回答 3

11

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

  1. GPS硬件
  2. 通过识别附近的 wifi 网络
  3. 蜂窝塔三角测量

如果您的应用不使用 GPS 或未运行(即之前已终止),设备将尝试使用上述方法 2 和 3 来定位用户。因此,设备定位用户的能力(当 GPS 硬件未使用或 GPS 信号较弱时)取决于 wifi 网络和手机信号塔的可用性。wifi 网络和手机信号塔越多,定位精度就越高。因此,当用户进入或离开受监控区域(即越过“地理围栏”)时,无法准确预测用户何时会收到通知。(当然,如果所讨论的区域始终相同,则设备在每次定位时或多或少都会以相同的准确度定位用户)。

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

具体的阈值距离由硬件和当前可用的定位技术决定。例如,如果禁用 Wi-Fi,则区域监控的准确性会大大降低。但是,出于测试目的,您可以假设最小距离约为 200 米。

因此,区域监控不需要 wifi,但启用它后,您的设备将有更好的机会确定用户是否越过区域的地理围栏。

于 2013-04-08T20:45:04.030 回答
2

如果您关闭 WiFi,您的定位精度会降低。如果您没有 GPS 信号(在某些建筑物内),您将不会获得任何位置更新。当你在外面时,或者你使用位置模拟器进行测试时,你有没有试过这个?

此外,如果您有 GPS(带 sims 的 iPhone 或 iPad),则地理围栏功能不需要 WiFI。

于 2013-04-08T16:38:21.703 回答
2

如果没有使用核心位置的 wifi,可能会发生奇怪的奇怪事情。为了帮助您解决问题,我将摆​​脱距离过滤器,这可能会弄乱事情并且不是很有帮助。我可能只会将 kCLLocationAccuracyBest 用于需要设置地理围栏所需的准确性的任何事情。对我来说,使用其他精度和过滤器有时会使 gps 仪表偏离 1000 米,并需要一两分钟才能自行纠正。如果电池过多,则设置一个系统,根据它与栅栏的距离来关闭和打开它。

于 2013-04-08T17:30:35.847 回答