2011-10-14 10 views
5

ho bisogno di fare il monitoraggio di sfondo GPS su un telefono Android, e sto attualmente intenzione di avere due scenari:tracciamento GPS Android e Wakelock

  1. Quando il telefono è collegato a un (auto) caricabatterie, ottenere frequenti posizioni GPS (ogni minuto).
  2. Quando il telefono non è collegato a un caricabatterie, eseguire il polling solo per una posizione ogni 5-30 minuti, a seconda della quantità di batteria interessata.

So che dovrò implementare il tracciamento in un servizio e probabilmente mostrare una notifica per mantenere in vita il servizio. Tuttavia, deduco che il telefono potrebbe entrare in modalità di sospensione in qualsiasi momento, il che interromperebbe il tracciamento GPS.

Per questi scenari, qual è il modo migliore per eseguire il tracciamento GPS in background continuo, senza che il telefono vada a dormire e senza scaricare troppa energia?

Finora ho raccolto la seguente:

per lo scenario 1, io probabilmente bisogno di un acquisiscono un Wakelock, e mantenere la CPU svegli tutto il tempo (ma lo schermo può dormire). L'applicazione MyTracks sembra fare questo in TrackRecordingService. OpenGPSTracking sembra fare the same.

Per lo scenario 2, posso utilizzare AlarmManager per pianificare un controllo ogni x minuti. Il mio servizio dovrà acquisire un WakeLock temporaneo, attendere una singola posizione GPS, quindi fermarsi e rilasciare nuovamente il WakeLock.

Come sarebbe il consumo di energia confrontare per questi due metodi (WakeLock permanente vs AlarmManager)? Il GPS può ricevere una posizione precisa in un ragionevole lasso di tempo quando esegue il controllo solo ogni 30 minuti?

Ci sono alcune domande correlate su StackOverflow, ma nessuna con risposte soddisfacenti. Fra i più semi-utile:

risposta

5
  1. Quando il telefono è collegato al caricabatterie u può acquisire la Wakelock come Se stai pianificando di ottenere frequenti posizioni GPS, AlarmManager non sembra essere una grande idea in questo caso.

  2. Quando il telefono non è collegato al caricatore, è possibile utilizzare il gestore degli allarmi poiché esegue il polling solo per una posizione ogni 5-30 minuti. L'acquisizione di wakelock influisce in modo significativo sulla durata della batteria.

L'implementazione ha luogo fino a u.

Cheers .... !!

+0

Qualche idea di quanto il wakelock influenzi la batteria? E quanto tempo ci vorrà per acquisire una posizione se è fatta solo una volta ogni pochi minuti? – Ralf

+0

La durata della batteria del dispositivo sarà influenzata in modo significativo dall'utilizzo di questa API. Non acquisire WakeLock a meno che tu non ne abbia davvero bisogno, utilizzare i livelli minimi possibili e assicurarti di rilasciarlo il prima possibile. http://developer.android.com/reference/android/os/PowerManager.html#ACQUIRE_CAUSES_WAKEUP – Rohit

6

È possibile utilizzare il ricevitore di trasmissione se l'alimentazione è collegata o meno e procedere di conseguenza.

Per alimentazione collegato:

public class PowerConnected extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    if(intent.getAction().equalsIgnoreCase("android.intent.action.ACTION_POWER_CONNECTED")){ 
     //Initialize your listener here... 
    } 
    } 

} 

Nel file manifest:

<receiver android:name=".receiver.PowerConnected" > 
<intent-filter > 
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> 
</intent-filter> 
</receiver> 

quando è spenta:

public class PowerDisconnected extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    if(intent.getAction().equalsIgnoreCase("android.intent.action.ACTION_POWER_DISCONNECTED")){ 
    //Do your task here...  
    } 
} 
} 

Nel file manifest:

<receiver android:name=".receiver.PowerDisconnected" > 
<intent-filter > 
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> 
</intent-filter> 
</receiver> 

Ora è necessario utilizzare service e inizializzare il proprio GPS lì. Quando l'alimentazione è collegata, utilizzare GPS_Provider altrimenti usare network provider. Se necessario, utilizzare wakelock.

+0

Grazie, questo è utile. – Ralf

+0

si dovrebbe accettare la risposta altrimenti galleggerà come senza risposta. Grazie .. –

+2

Mentre userò sicuramente questo, penso che non risponda alla mia domanda principale su quale sia la migliore strategia per il tracciamento GPS. – Ralf