2011-12-31 15 views
5

Estamos desarrollando una aplicación que tiene un uso intensivo de GPS y no podemos optimizar la duración de la batería.iPhone GPS - Drenado de la batería extremadamente rápido

Incluso cuando el dispositivo no se mueve, hay drenaje significativo de la batería que, de acuerdo con el código, no debería suceder.

Aquí está el código:

locationManager = [[CLLocationManager alloc] init]; 
locationManager.distanceFilter = 100; 
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
[locationManager startUpdatingLocation]; 

Lo ideal sería que desea activar el GPS cada 20 minutos (si no hay cambio de ubicación, entonces ahorrar batería) o cada 5 minutos si no hay cambio de ubicación. De acuerdo a mi desarrollador que esto no puede hacerse

Anteriormente estábamos usando kCLLocationAccuracyBest, que estaba consumiendo la batería muy rápido y ahora estamos utilizando kCLLocationAccuracyHundredMeters.

startUpdatingLocation - es obtener las coordenadas GPS. Hay otra llamada startMonitoringSignificantLocationChanges que es para obtener las coordenadas AGPS, que creo que devuelve las coordenadas cada vez que cambia la torre de la celda, y por lo tanto, consume la batería realmente rápido.

distanciaFiltro - La distancia mínima (medida en metros) que un dispositivo debe moverse lateralmente antes de que se genere un evento de actualización. Sobre la base del filtro de distancia obtenemos la solución de GPS del dispositivo y luego enviamos las coordenadas de GPS actualizadas al servidor.

Cualquier ayuda será muy apreciada ¡Gracias!

+3

Los sensores en marcha, especialmente los gps, durante períodos prolongados van a drenar la batería sin importar lo que haga. si desea prolongar la vida, disminuya la frecuencia de muestreo. –

+0

Hola Maverick3, queremos verificar la ubicación del GPS cada 20 minutos para guardar la batería del GPS. ¿Hay alguna manera de implementar esto? De acuerdo con mi desarrollador, no podemos hacer esto. Apreciaré cualquier sugerencia. – KB403

+0

Recomendaría el uso de StartLocating y StopLocating con temporizadores, y luego crear perfiles para ver cómo cambia el consumo de energía. Otra alternativa es usar un servicio de proveedor de ubicación si el acceso a Internet está disponible. Pero esto es mucho menos preciso. – Totoro

Respuesta

-1

Lo ideal sería que desea activar el GPS cada 20 minutos (si no hay ningún cambio lugar a continuación, guardar la batería) o cada 5 minutos si no cambio de ubicación. De acuerdo a mi desarrollador que esto no puede hacerse

Esto podría hacerse utilizando un NSTimer que llama a una (un método personalizado que crea el CLLocationManager y llama startLocating en él) startLocating método cada 20 minutos. Asegúrese de llamar al stopLocating de CLLocationManager una vez que haya encontrado una CLLocation con la precisión que desee.

Sin embargo, hacerlo significa que durante 20 minutos puede estar utilizando una ubicación que está totalmente desactivada. Depende de cómo planee usar la ubicación y cuán preciso debe ser, pero tal vez lo que su desarrollador quiere decir "no posible" es que su aplicación necesita la ubicación real del usuario en todo momento.

+0

Hola Samvermette, ¿Tiene alguna sugerencia sobre cómo optimizar la duración de la batería de otra manera? Estamos bien, no verificamos la duración de la batería durante 20 minutos cuando no hay movimiento y la aplicación está en segundo plano.Sin embargo, quiero actualizar la ubicación de gps cuando la aplicación está en primer plano. Gracias por tu ayuda. – KB403

+0

Asegúrate de llamar a 'stopLocating' y cancelar todas las solicitudes de red en curso en' appDidEnterBackground'. El GPS y las antenas son lo que consume más batería de los dispositivos con iOS. – samvermette

+0

El problema de esta solución es que lo que apesta a la batería es que el GPS se enciende. –

4

hay otra llamada que startMonitoringSignificantLocationChanges es conseguir AGPS coordenadas que creo que devuelve las coordenadas antena de telefonía móvil cada vez que va a cambiar, y por lo tanto la batería se consume muy rápido .

Eso es exactamente lo que hace, pero está sacando conclusiones sobre la potencia requerida para eso. El receptor GPS y el transceptor WiFi se pueden usar para ayudar a determinar la ubicación, pero son dispositivos adicionales que deben ser alimentados para ser útiles.Pero los teléfonos móviles como el iPhone necesitan mantenerse en contacto con la torre celular más cercana para poder recibir llamadas telefónicas, por lo que usar las torres de telefonía como fuente de información de ubicación debería ser muy eficiente con respecto a la energía. Esto es lo que dice acerca de la CLLocationManager reference page-startMonitoringSignificantLocationChanges:

Esta interfaz ofrece nuevos eventos sólo cuando se detecta cambios en las torres de celulares asociados del dispositivo , lo que resulta en cambios menos frecuentes y el consumo de energía significativamente menor.

También describe el servicio como un "enorme ahorro de energía", por lo que parece ser la herramienta adecuada para el trabajo que describe. Por supuesto, si también es utilizando utilizando el mecanismo de actualización de ubicación estándar, no verá ese ahorro de energía, por lo que debe asegurarse de no utilizar ambos.

Lo ideal sería que desea activar el GPS cada 20 minutos (si no hay ningún cambio lugar a continuación, guardar la batería) o cada 5 minutos si no cambio de ubicación. Según mi desarrollador, esto no se puede hacer

Parece que hay algún tipo de malentendido aquí. Ciertamente, puedes disparar el GPS cada 20 minutos para obtener una solución si eso es lo que quieres, aunque no puedes hacerlo desde el fondo. El servicio de cambio de ubicación significativo notificará a su aplicación, incluso si se está ejecutando en segundo plano, por lo que tal vez su desarrollador esté hablando de actualizaciones de fondo.

0

Su creencia de que startMonitoringSignificantLocationChanges consume la batería realmente rápido es probable que sea incorrecta. Los cambios en la torre de celdas generalmente ocurren con mucha menos frecuencia que los movimientos de 100 metros. Y un iPhone busca este evento incluso cuando está inactivo y todas las aplicaciones están en reposo.

Sin embargo, mantener un teléfono celular encendido (por ejemplo, el modo Avión desactivado) lejos de cualquier torre (apenas 1 bar) agotará la batería del dispositivo, independientemente de si la aplicación está realizando algún control de ubicación.

En dispositivos iOS de serie, una aplicación no puede activar la monitorización de la ubicación puramente por temporizador cada 20 minutos o cada 5 minutos, sin mantener el dispositivo encendido y su aplicación en primer plano, lo que consumirá la batería.

0

Si necesita un buen nivel de precisión, debe iniciarUpdatingLocation y tan pronto obtenga el primer arreglo, debe detenerUpdatingLocation y luego iniciarMonitoringSignificantLocationChanges.

Esto es suficiente para la mayoría de las aplicaciones.

Cuestiones relacionadas