2014-12-05 13 views
11

Ho bisogno di richiedere continuamente la posizione nella mia app e dovrebbe sempre essere un servizio in background.Android il modo migliore per ottenere la posizione ripetutamente in background considerando anche la batteria

Ho bisogno di latlng per come ogni due minuti circa. Ho pensato di utilizzare un servizio e in onStartCommand userei locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_INTERVAL, MINIMUM_DISTANCE, this); così come locationmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MINIMUM_TIME_INTERVAL, MINIMUM_DISTANCE, this);

ma temo col passare del tempo questa requestLocationUpdates ferma dandomi posizione. Quindi ho pensato di usare AlarmManager così continua a darmi la posizione.

La mia domanda è, è necessario utilizzare AlarmManager per ricordare di ottenere la posizione o se uso AlarmManager esaurirà molta batteria.

Volevo solo conoscere l'approccio migliore per ottenere la posizione in background. Grazie in anticipo.

risposta

3

Perché si desidera utilizzare un servizio per questo? Per me sta funzionando senza servizio. Ho classe denominata GPSlistener che implementa LocationListener e ha questa linea nel suo costruttore:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this); 

Sto usando questo approccio, perché non voglio locationUpdates per fermare ma è possibile utilizzare questo metodo per iniziare ad ascoltare:

public void startListening(){ 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this); 
} 

e poi questo smettere di ascoltare:

public void stopListening(){ 
    locationManager.removeUpdates(this) 
} 

È possibile salvare batteria impostando superiore MINTIME o minDistance. Credo che minDistance dovrebbe essere più pertinente per te. Così, per esempio, se si desidera aggiornare la localizzazione solo ogni 10 metri, allora si chiama in questo modo

locationManager.requestLocationUpdates(LocationManager.GPS_Provider, 5000, 10, this)

migliore impostazione dipende dalla vostra applicazione. Ad esempio, se si desidera creare una navigazione GPS per il ciclismo, è necessario utilizzare l'aggiornamento della posizione dopo un massimo di 5 m. D'altro canto, se stai costruendo app per un'attività "più lenta" come l'escursionismo, allora basterebbero 10 o 15 metri.

Non penso che locationManager debba smettere di inviare aggiornamenti di posizione e anche io non ho avuto questo problema nella mia app.

Utilizzando questo approccio, il GPS viene eseguito in background senza utilizzare il servizio. Ma la verità è che la mia app consiste di una sola attività e 3 frammenti, quindi non ho bisogno di usare il servizio.

+0

Il servizio è necessario perché anche se l'app non è in esecuzione in background, dovrei essere in grado di ottenere la posizione. Quindi usare il servizio mi aiuta in questo. – Nav

+0

Beh, credo che requestLocationUpdates avvii il servizio quindi non penso che sia necessario avviare il proprio servizio per questo. Il tuo problema è che requestLocationUpdates interrompe l'invio della posizione dopo un breve periodo di tempo? Sto ottenendo questo correttamente? – horin

+0

Ya. Non dovrebbe fermarsi in nessun punto del tempo. – Nav

0

Il nuovo Google Play location APIs sono di gran lunga il modo migliore per andare. L'API di posizione fusa tiene conto di tutti i fornitori di posizione e dell'accuratezza della posizione necessaria per fornire la posizione migliore per la tua app.

Le API di geofencing (notifica all'app quando l'utente entra/esce da una certa area) e le API di riconoscimento attività (è l'utente che cammina? Seduto? Corsa? Guida?) Può anche essere molto utile per risparmiare batteria e migliorare precisione.

Ovviamente ciò richiede che l'utente disponga di una versione aggiornata dell'app Google Play, ma ciò non dovrebbe rappresentare un problema.

+2

In realtà è un po 'un problema con i dispositivi con licenza non Google. I Kindle Fire non hanno Google Play, né fanno nulla con una ROM personalizzata o con molti piccoli OEM asiatici. A meno che non lo pirifichino, naturalmente. –

+0

In tal caso, impostazione predefinita per androids gestore località se e solo se i servizi di riproduzione di google non sono disponibili. –

Problemi correlati