2010-12-10 8 views
15

Aquí está mi situación. Estoy desarrollando una aplicación para iPhone que usa Core Location para determinar la ubicación del dispositivo. Hay un ícono: el ícono de servicios de ubicación, que aparece en la barra de estado del dispositivo. Sé lo suficiente como para decir que el objetivo del icono es decirle al usuario que algunos Servicios de ubicación están siendo utilizados actualmente. Para el usuario perspicaz, esto significa una menor duración de la batería. Por esa razón, quiero asegurarme de que el ícono se muestre solo cuando los Servicios de ubicación estén siendo empleados por mi aplicación.¿Qué determina la presencia del ícono de servicios de ubicación de iPhone en la barra de estado?

Introduzca la confusión. Nosotros, como desarrolladores, no tenemos acceso a la barra de estado a través del SDK oficial. Esto significa que el sistema operativo mostrará ese icono automáticamente en función del comportamiento de la aplicación. Por más que lo intente, no puedo encontrar una definición clara de qué es exactamente lo que hace que aparezca ese ícono.

Tal como está, el ícono aparece antes de que el delegado de mi aplicación obtenga el control y permanezca visible mientras la aplicación esté instalada, ejecutándose o no. Este es claramente el peor caso posible, y me hizo dudar de mi uso de CLLocationManager. Quisiera explicar mi uso, pero como caso extremo, traté de eliminar el marco CoreLocation (y el framework MapKit, que sospecho que también usa CoreLocation), y todo el código relacionado con la ubicación. La aplicación sigue causando que el ícono aparezca y permanezca hasta que elimine la aplicación. Luego creé una nueva aplicación y no realicé ningún cambio excepto cambiar el identificador de la aplicación para que coincida con el identificador de mi aplicación. El ícono aún apareció. Cambié el identificador para usar el identificador de una de mis aplicaciones que no usaba la ubicación, y el ícono no apareció. Me aseguré de restablecer el dispositivo durante esta prueba.

Este problema realmente me está matando. No puedo imaginarme qué tiene que ver el ID de la aplicación con el ícono de Servicios de ubicación, pero no veo otra causa para su persistencia. Parece que Red Herring esconde el verdadero problema, pero no sé cuál es el verdadero problema.

+0

¿Está iniciando actualizaciones de ubicación apenas se inicia su aplicación, o en algún momento después (como después de presionar un botón)? –

+0

Los estoy comenzando en la aplicaciónDidBecomeActive: delegar el método. Entonces, tan pronto como se inicie la aplicación. –

+0

Revisa mi respuesta editada. Lamentablemente, no tiene suerte en cuanto a que el ícono no se muestra, aunque eso no significa necesariamente que la batería se esté agotando a un ritmo mayor. –

Respuesta

22

Aquí hay una actualización y una solución que he encontrado después de algunas modificaciones. Dado que mi problema era claramente un problema con el sistema operativo que establecía cierta conexión entre el ID de mi aplicación y el ícono de Servicios de ubicación, intenté restablecer las advertencias de ubicación del dispositivo, algo que originalmente no sabía que podía hacer. Para los curiosos, esto se puede lograr a través de la aplicación Configuración, luego General> Restablecer> Restablecer advertencias de ubicación. Después de realizar este restablecimiento y al volver a instalar la aplicación, nuevamente solicitó utilizar los Servicios de ubicación.Ahora, el ícono aparece precisamente en startUpdatingLocation y desaparece con precisión en stopUpdatingLocation, exactamente como lo pretendía originalmente.

No tengo idea de lo que inicialmente causó esta condición, y tengo pocas dudas de que la condición en sí es una falla del sistema operativo, como indicó Matthew Frederick, pero, al menos en mi caso, la condición es curable.

+0

Ah, se olvidó de mencionar eso en mi respuesta: para algunos reinicios las advertencias resolverán el problema, pero no para todos. No tengo idea de por qué, pero sé que para un iPhone 3GS mío que ejecuta OS 4.0 se necesitó una limpieza completa del dispositivo para resolverlo, algo que no puedo sugerir a mis clientes. ¡Muy contenta de que lo haya resuelto por ti! –

+0

Gracias por publicar todo esto. Me di cuenta de un comportamiento similar en mi aplicación. – Oscar

+0

Trabajó para mi aplicación también. – rakeshNS

1

No ha habilitado la opción de ubicación en la clave UIBackgroundModes de la aplicación .plist, ¿o sí?

+0

No, no hay tal entrada. –

5

Hay un error conocido que está causando este problema. Informé a Apple hace un par de meses y me informaron que era un engaño de un problema conocido. Desafortunadamente, no parece haber sido reparado.

descubrí por primera vez cuando vi aparecer el símbolo (y mi aplicación mostrando que tienen permiso para usar la información de ubicación en la aplicación Ajustes) simplemente instalar mi aplicación en un dispositivo que ya no tenía la aplicación instalada , sin siquiera haberlo ejecutado.

Por alguna razón, el dispositivo guarda una referencia a la aplicación que una vez recibió permiso para los servicios de ubicación.

Peor aún, si la aplicación realmente recibió el permiso en el pasado, luego es desinstalado, a continuación, una versión actualizada de la aplicación se instala, no sólo aparece el icono pero la aplicación mejorada ya no recibe realmente la información de ubicación porque el la aplicación nunca llega a pedirle al sistema operativo permiso de ubicación. De hecho, se niega permanentemente.

Muy frustrante para mí y para un pequeño número de mis usuarios.

+0

De hecho, estoy viendo un comportamiento similar. Parece que basta con instalar cualquier aplicación con el mismo identificador de aplicación para hacer que aparezca el icono. Gracias por la info. –

+0

Ver mi respuesta a mi propia pregunta. Ahora creo que su pequeño número de usuarios frustrados puede resolver su problema con los mismos pasos que seguí para resolver el mío. –

+0

¿Hay alguna posibilidad de un enlace o identificación de error para el problema conocido? – Roger

Cuestiones relacionadas