iOS: Geofencing con WiFi desactivado

Tengo un código que crea una geocerca en mi iPhone que activará un código que se ejecutará cuando se llame a calledExitRegion. Sin embargo, he descubierto que cuando tengo WiFi desactivado, neverExitRegion nunca se desencadena. ¿Se requiere WiFi para monitorear los cambios de región en iOS? Mi precisión deseada se establece en kCLLocationAccuracyHundnetworkingMeters. Estoy probando en iOS 6.1 y iPhone 4.

Aquí está mi código para configurar la supervisión de location:

- (id)init { self = [super init]; if (self) { CLLocationManager *manager = [[CLLocationManager alloc] init]; manager.delegate = self; manager.desinetworkingAccuracy = kCLLocationAccuracyHundnetworkingMeters; manager.distanceFilter = RADIUS/10.0; manager.headingFilter = kCLHeadingFilterNone; self.locationManager = manager; self.authorizationStatus = [CLLocationManager authorizationStatus]; } return self; } 

Gracias

Los dispositivos iOS usan tres methods para descubrir la location del usuario. Desde (generalmente) más precisos a less precisos, son:

  1. Hardware de GPS
  2. Mediante la identificación de networkinges wifi cercanas
  3. Triangulación de la torre celular

Si su aplicación no usa el GPS o no se está ejecutando (es decir, se ha terminado previamente), el dispositivo intentará utilizar los methods 2 y 3 anteriores para ubicar al usuario. Por lo tanto, la capacidad del dispositivo para ubicar al usuario (cuando el hardware del GPS no está en uso o si hay una débil señal de GPS) depende de la disponibilidad de networkinges wifi y torres celulares. Cuantas más networkinges Wi-Fi y torres celulares, mejor será la precisión de la location. Por lo tanto, cuando un usuario ingresa o sale de una región supervisada (es decir, cruza una "geocerca"), es imposible pnetworkingecir exactamente cuándo el usuario recibirá la notificación, si es que lo hace. (Por supuesto, si la región en cuestión es siempre la misma, el dispositivo localizará más o less al usuario con el mismo grado de precisión en cada ocasión).

Aquí está la documentation relevante de la Guía de progtwigción de la concientización de la location :

Las distancias específicas del umbral están determinadas por el hardware y las tecnologías de location que están actualmente disponibles. Por ejemplo, si Wi-Fi está deshabilitado, la supervisión de la región es significativamente less precisa. Sin embargo, con fines de testing, puede suponer que la distancia mínima es de aproximadamente 200 metros.

Por lo tanto, no se requiere wifi para que la monitorización regional funcione, pero habilitada, su dispositivo tendrá una mejor oportunidad para determinar si el usuario ha cruzado o no la geocercía de una región.

Si apaga WiFi, la precisión de su location disminuye. Si no tiene señal de GPS (dentro de algunos edificios), no recibirá ninguna actualización de location. ¿Has intentado esto cuando estás fuera, o si usaste el simulador de location para probar?

Además, WiFI no es necesario para la function de geocerca si tiene GPS (iPhones o iPad con sims).

Cosas raras extrañas pueden suceder sin wifi usando la location central. Para ayudarte en tu caso, me deshago del filter de distancia, que puede meterse con cosas y no es muy útil. Probablemente solo use kCLLocationAccuracyBest para cualquier cosa donde necesite la precisión requerida para configurar una geocerca. El uso de otras precisiones y filters para mí a veces a través del medidor de GPS desactivado en 1000 metros y tomar un minuto o dos para corregirse. Si esto es demasiada batería, configure un sistema donde se apague y encienda según qué tan lejos esté de la cerca.