2009-01-28 22 views
17

Estoy buscando comentarios, enlaces de blog, etc. que ofrecen algunos consejos y trucos para el desarrollo de un iPhone con GPS. He leído y entiendo la API, tengo mi aplicación de demostración en funcionamiento, etc. pero me he encontrado con algunos "caprichos" con gps en el iPhone. Por ejemplo, parece que recibirás muchas menos actualizaciones de ubicación cuando tu iPhone entre en el modo de "ahorro de energía". He leído que puedes combatir esto reproduciendo música en tu aplicación [no estoy seguro si esto es cierto].Desarrollo de GPS para iPhone - Consejos + Trucos

También parece que, en términos de hacer un podómetro razonable, debe filtrar cualquier lectura con una precisión horizontal de menos de 20 metros. Suena bien?

¿Hay algún tipo de lista de verificación en la web para los gps de iPhone?

Gracias de antemano.

Respuesta

39

No sé de ninguna lista específica, pero aquí están algunas de las cosas que usted debe tener en cuenta:

  • no estás haciendo operaciones de búsqueda GPS. Estás haciendo búsquedas en Core Location. Core Location podría estar recibiendo o no su información del GPS. Mucha gente todavía usa iPhones pre-3G que no tienen GPS, e incluso en un teléfono 3G, el GPS puede no estar disponible en muchos casos (si la persona está en el interior, por ejemplo). En esos casos, el teléfono intentará triangular en función de las torres de los teléfonos celulares, y Core Location devolverá el resultado. Será mucho menos preciso que el GPS.
  • Core Location almacenará los datos en caché. Es probable que la primera lectura que proporcione a su aplicación sea una lectura antigua, que puede ser o no precisa, dependiendo de si el teléfono se ha movido. Asegúrese de verificar la marca de tiempo de cualquier ubicación y ver si es anterior a la iniciación de su aplicación.
  • No sé lo que quiere decir con el modo "ahorro de energía", pero si está pensando en cuándo la pantalla está bloqueada/apagada, eso no detiene la ejecución de Core Location si su aplicación aún se está ejecutando. Por el contrario, es fácil agotar la batería de su teléfono mucho más rápido de lo que esperaría si bloquea el teléfono mientras se está ejecutando una aplicación que utiliza Core Location, ya que el teléfono continuará actualizando la aplicación a medida que haya nuevos datos de ubicación disponibles. Puede evitar esto en su aplicación escuchando UIApplicationWillResignActiveNotification para detectar el bloqueo de pantalla, y UIApplicationDidBecomeActiveNotification para detectar el desbloqueo.
  • Los resultados de mayor precisión tomarán más tiempo en adquirir, porque cuanto más espere, mejores serán los resultados, hasta un límite. Si decide que necesita estar dentro de N metros, considere cuánto tiempo tendrá que esperar el usuario esperando a que el teléfono localice su ubicación.

Si 20 metros son lo suficientemente precisos es algo que solo usted puede responder, según cómo espere que se use su aplicación. Pruebe la aplicación y vea si funciona de la manera que desea que funcione.

+0

[quote] • No sé qué quiere decir con el modo "ahorro de energía", pero si está pensando en cuándo la pantalla está bloqueada/apagada, eso no impide que se ejecute Core Location si su aplicación todavía se está ejecutando. [/ quote] No estoy seguro de si esto es cierto. Obtengo una solución (17m HDOP) - use el botón de bloqueo - espere 30 segundos - y después de encender (desbloquear) nuevamente toma un tiempo volver a obtener una solución - lo primero que obtengo es una "mala" (alrededor de 1000 metros) . Parece que el bloqueo da como resultado un "modo seguro de energía" para la ubicación (ya no usa el GPS, diría) – ManniAT

+2

Cuando escribí esta respuesta, iPhone OS 3.0 ni siquiera estaba en versión beta pública, por lo que ahora puede ser menos preciso de lo que era en ese momento. Las técnicas generales aún se aplican pero los detalles de comportamiento cuando la pantalla está bloqueada parecen haber cambiado. –

26

Tom tenido una gran respuesta (quería tener en cuenta especialmente el retorno habitual del primer valor podría ser una ubicación en caché más), pero tuve un par de cosas más que añadir:

  • Se puede decir que la ubicación administrador para detener y comenzar de nuevo si desea obligarlo a emitir al menos una actualización de ubicación más.
  • Si no lo sabía, hay métodos de conveniencia en CLLocation para darle la distancia entre dos ubicaciones.
  • Como nota de documentos, debe implementar locationManager: didFailWithError: aunque no es necesario (aunque solo sea para detener las actualizaciones del administrador de ubicación por un tiempo).
  • ¡Pruebe a fondo escenarios donde el usuario no permite actualizaciones de ubicación para su aplicación!
  • Muy, muy raramente, puede obtener actualizaciones fuera de servicio (es decir, obtiene una ubicación más precisa seguida de una fecha menos precisa)
  • El simulador le dará una actualización de ubicación, pero siempre informará su ubicación como HQ de Apple.
+0

Muchas gracias Kendall. ¡Ojalá pudiera verificar tu respuesta también! –

+1

Votando por esta respuesta porque en realidad brinda consejos muy útiles sobre el uso. – Jann

Cuestiones relacionadas