2011-06-16 9 views
9

uso el administrador de ubicación de eventos significativos en ios, pero parece que no está basado en el cambio de celda según lo afirmado.evento de ubicación significativo de iphone no relacionado con el cambio de celda

utilicé una aplicación simple que utilizaba un evento de ubicación significativo, pero no pude obtener una respuesta repetible, consistente o sensible del ios sdk.

tracé la ruta (línea azul), las torres de telefonía (marca de lugar) y una cuadrícula de 1000m2 (casilla azul) en el mapa a continuación. map showing route

la ruta era 5000m de distancia.

lo conduje 3 veces.

  • test1. recibió 2 sig eventos
  • test2. ninguno
  • prueba3. eventos 1 sig recibidos

antes de quejarse de que mi prueba es demasiado pequeña, he estado monitoreando otras rutas de prueba durante días y todas muestran la forma incoherente.

esperaba que el evento sig se basara en la conmutación de la torre de la célula. así que usé una aplicación jailbreak llamada 'señal' para identificar qué es la celda activa. (NB.it es sorprendente qué celda está activa. No es lo que esperaría)

Al monitorear la aplicación de 'señal', las celdas cambiaron 6-7 veces por lo que noté.

aún no recibí 6-7 eventos sig. Entonces no puedo ver ninguna correlación entre el cambio de células y eventos significativos.

así que tengo las siguientes preguntas

  • Q1. ¿Cuál es el evento significativo desencadenante?
  • Q2. ¿Por qué el resultado no es confiable/inconsistente?
  • Q3. ¿Cómo puedo lograr que mi aplicación reciba eventos significativos consistentes y sensibles a 500m?

Este es el código que se ejecuta en la aplicación de prueba

-(void)initLocationManager { 
    if (locationManager == nil) { 
     self.locationManager = [[[CLLocationManager alloc] init] autorelease]; 
     locationManager.delegate = self; 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
     [locationManager startUpdatingLocation]; 
     [locationManager stopUpdatingLocation]; 
     [locationManager startMonitoringSignificantLocationChanges]; 

    } 
} 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [self initLocationManager]; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation 
    fromLocation:(CLLocation *)oldLocation { 
    NSLog(@"%@", newLocation); 
    [[NSNotificationCenter defaultCenter] 
postNotificationName:@"PositionUpdate" object:nil]; 
} 

-lp

Respuesta

4

Ubicación Cambios significativos son determinados por el IOS y no hay nada que puede hacer para cambiar su granularidad directamente. Tenga en cuenta que solo en iOS 4 solo se usan las ubicaciones de la torre de la celda. Las versiones futuras del sistema operativo mejorarán esto.

Pero como solución alternativa, puede activar las actualizaciones de posición de CoreLocation normales cuando la aplicación se despierta/inicia por un cambio de ubicación significativo. Y luego, una vez que tenga el resultado perfecto, desactive la monitorización de ubicación de nuevo para permitir que la aplicación vuelva a la hibernación.

+0

correcto utilizando la posición CoreLocation después de un evento sig es lo que estoy usando ahora. Pero obtener el evento sig es mi problema. Ni siquiera puedo presentar un error porque el documento es tan vago. – lpic

+0

Tendrás que renunciar a las cosas sig change para iOS 4 porque está diseñado para disparar en los cambios de varios kilómetros. Y reevaluar con iOS 5, porque PODRÍA haber una mejora allí para usar WiFi para eso. :-) – Cocoanetics

+0

iOS 5 usa wifi para una monitorización de cambios significativa solo cuando el dispositivo está conectado a una fuente de alimentación (al menos según mis observaciones). Si no está conectado, probablemente no utilizará wifi para cambios significativos. – Kevlar

0

No estoy seguro de si ya ha mirado esto, pero la sesión WWDC 2010 115 (Uso de la ubicación principal en iOS) podría darle una mejor idea de la importante API de cambio de ubicación.

+0

no tengo la sesión 115 antes. Después de leerlo, sigue goteando sobre el cambio celular. 'Calcula la ubicación cuando el dispositivo cambia las torres de celdas o cuando otras aplicaciones usan los servicios de ubicación' que no es verdadero o de lo contrario plantearía un error, pero no puedo ya que la API no especifica el cambio de celda. sería genial permitir a los programadores crear su propio algoritmo para el cambio en lugar de apple voodooo. – lpic

1

Acabo de hacer una caminata de prueba de 3 kilómetros en el centro de San Francisco con mi aplicación, y obtuve cero eventos de ubicación de cambio significativo también. Alterné mi aplicación para cambiar al sondeo normal con kCLLocationAccuracyHundredMeters y obtuve más de 40 eventos en la misma distancia.

Haciéndome eco de los sentimientos de varias otras respuestas aquí y en otros lugares, voy a retrasar el cambio significativo hasta iOS 5. Creo que lo mejor que puedes hacer ahora es robar tu propia lógica de negocios para sondear la antigua ubicación central manera, y la frecuencia de trinquete baja gradualmente con el tiempo (o algo) para ser amigable con la batería.

Parece que en iOS 4, Cambio significativo es más adecuado para poder decir qué final de su viaje está en que bloque (o incluso código postal) que está en.

+0

no contenga la respiración esperando un nuevo vudú de manzana para ios5. La moraleja de este hilo es que no está claro cómo se genera el evento significativo. lo mejor que podemos hacer es usar el evento significativo y luego refinarlo usando el CoreLocationManager. – lpic

+0

El problema es cuando quieres tener un evento porque el usuario caminó 300 metros por la calle. No ayuda a obtener una actualización de ubicación significativa una hora más tarde, si desea desencadenar en una actividad más granular. En resumen: tienes razón. No estoy conteniendo la respiración. :) –

Cuestiones relacionadas