2011-12-31 13 views
5

Stiamo sviluppando un'applicazione che ha un utilizzo intenso del GPS e non siamo in grado di ottimizzare la durata della batteria.iPhone GPS - Drenaggio della batteria estremamente veloce

Anche quando il dispositivo non viene spostato, c'è carico batteria significativo che, in base al codice, non dovrebbe accadere.

Ecco il codice:

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

Idealmente vogliamo innescare GPS ogni 20 minuti (se non v'è alcun cambiamento di posizione quindi salvare batteria) o ogni 5 minuti se non v'è il cambiamento di posizione. Secondo il mio sviluppatore questo non può essere fatto

precedenza usavamo kCLLocationAccuracyBest, che stava consumando batteria molto veloce e ora stiamo usando kCLLocationAccuracyHundredMeters.

startUpdatingLocation - è quello di ottenere le coordinate GPS. C'è un'altra chiamata startMonitoringSignificantLocationChanges che serve per ottenere coordinate AGPS che credo restituisca le coordinate ogni volta che la torre delle celle cambierà, e quindi consuma la batteria molto velocemente.

distanceFilter - La distanza minima (misurata in metri) che un dispositivo deve spostare lateralmente prima che venga generato un evento di aggiornamento. Sulla base del filtro della distanza otteniamo la correzione GPS dal dispositivo e quindi inviamo le coordinate GPS aggiornate al server.

Qualsiasi aiuto sarà molto apprezzato Grazie!

+3

I sensori in esecuzione, in particolare i gps, per periodi prolungati consumano la batteria a prescindere da ciò che si fa. se vuoi prolungare la vita, allora abbassa la frequenza di campionamento. –

+0

Ciao Maverick3, Vogliamo controllare la posizione GPS ogni 20 minuti per risparmiare la batteria GPS. C'è un modo per implementare questo? Secondo il mio sviluppatore, non possiamo farlo. Apprezzerò qualsiasi suggerimento. – KB403

+0

Vorrei raccomandare l'uso di StartLocating e StopLocating con i timer, e quindi la profilazione per vedere come cambia il consumo di energia. Un'altra alternativa è utilizzare un servizio di provider di posizione se è disponibile l'accesso a Internet. Ma questo è molto meno preciso. – Totoro

risposta

-1

Idealmente vogliamo innescare GPS ogni 20 minuti (se non v'è alcun cambiamento posizione quindi salvare batteria) o ogni 5 minuti se non c'è cambiamento posizione. Secondo il mio sviluppatore questo non può essere fatto

Ciò potrebbe essere fatto utilizzando un NSTimer che chiama un (un metodo personalizzato che crea il CLLocationManager e chiama startLocating su di esso) startLocating metodo ogni 20 minuti. Assicurati di chiamare il numero stopLocating di CLLocationManager dopo aver trovato una CLLocation con una precisione di tuo gradimento.

Tuttavia, facendo ciò significa che per 20 minuti potresti utilizzare un luogo completamente spento. Dipende da come prevedi di utilizzare la posizione e da quanto preciso deve essere, ma forse ciò che la tua dev intende per "non possibile" è che la tua app ha bisogno della posizione effettiva dell'utente in ogni momento.

+0

Ciao Samvermette, Hai qualche suggerimento su come ottimizzare la durata della batteria in un altro modo? Non stiamo controllando la durata della batteria per 20 minuti quando non c'è movimento e l'applicazione è in background.Tuttavia, desidera aggiornare la posizione GPS quando l'applicazione è in primo piano. Grazie per l'aiuto. – KB403

+0

Assicurati di chiamare 'stopLocating' e annulla tutte le richieste di rete in corso su' appDidEnterBackground'. GPS e antenne sono ciò che scarica la maggior parte della batteria dai dispositivi iOS. – samvermette

+0

Il problema di questa soluzione è che ciò che succhia la batteria è l'attivazione del GPS. –

4

C'è un altro startMonitoringSignificantLocationChanges chiamata che è quello di ottenere le coordinate AGPS che credo restituisce le coordinate ogni volta torre di cella cambierà, e quindi consuma la batteria molto veloce.

Questo è esattamente ciò che fa, ma si sta saltando alle conclusioni sulla potenza richiesta per questo. Il ricevitore GPS e il ricetrasmettitore WiFi possono essere utilizzati per determinare la posizione, ma sono dispositivi aggiuntivi che devono essere alimentati per essere utili.Ma i telefoni cellulari come l'iPhone devono comunque rimanere in contatto con la torre cellulare più vicina per ricevere telefonate, quindi usare le torri cellulari come fonte di informazioni sulla posizione dovrebbe essere molto efficiente per quanto riguarda la potenza. Ecco ciò che il CLLocationManager reference page dice di -startMonitoringSignificantLocationChanges:

Questa interfaccia fornisce nuovi eventi solo quando rileva modifiche alle torri cellulari associati dispositivo del , con conseguente aggiornamenti meno frequenti e il consumo di energia significativamente più basso.

Descrive inoltre il servizio come "tremendo risparmio energetico", quindi sembra lo strumento giusto per il lavoro che descrivi. Naturalmente, se sei utilizzando il meccanismo di aggiornamento della posizione standard, allo stesso tempo non vedrai i risparmi energetici, quindi assicurati di non utilizzarli entrambi.

Idealmente vogliamo innescare GPS ogni 20 minuti (se non v'è alcun cambiamento posizione quindi salvare batteria) o ogni 5 minuti se non c'è cambiamento posizione. Secondo il mio sviluppatore questo non può essere fatto

Sembra che ci sia una sorta di incomprensione qui. È possibile attivare il GPS ogni 20 minuti per ottenere una correzione se è ciò che si desidera, anche se non è possibile farlo dallo sfondo. Il servizio di cambio di posizione significativo notificherà la tua app anche se è in esecuzione in background, quindi forse il tuo sviluppatore sta parlando di aggiornamenti in background.

0

La convinzione che l'avvio di Monitoraggio di Notifiche RilevantiCambi consuma la batteria molto velocemente è probabilmente errato. I cambiamenti della torre cellulare di solito si verificano molto meno frequentemente rispetto ai movimenti di 100 metri. E un iPhone controlla questo evento anche quando è inattivo e tutte le app stanno dormendo.

Tuttavia, tenere acceso un telefono cellulare (ad esempio in modalità aereo disattivato) quando lontano da qualsiasi torre (appena 1 bar) scaricherà la batteria del dispositivo indipendentemente dal fatto che un'app esegua o meno un monitoraggio della posizione.

Su dispositivi iOS di serie, un'app non può attivare il monitoraggio della posizione solo su base temporizzata, ad esempio ogni 20 minuti o ogni 5 minuti, senza tenere il dispositivo acceso e l'app in esecuzione in primo piano, che scaricherà la batteria.

0

Se è necessario un buon livello di precisione, è necessario avviareUpdatingLocation e, non appena si ottiene la prima correzione, è necessario arrestareDatingUpdatingLocation e quindi avviareMonitoringSignificantLocationChanges.

Questo è sufficiente per la maggior parte delle applicazioni.

Problemi correlati