La mia app è progettata per tracciare periodicamente la posizione dell'utente e inviarla al server. Recentemente ho cambiato il mio codice con l'API di posizione dei servizi di gioco di Google.Utilizzo di Google Play Services LocationClient nel servizio in background
ho creato il locationclient e collegati al servizio in onStartCommand
public int onStartCommand(Intent intent, int flags, int startId) {
setUpLocationClientIfNeeded();
if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())
mLocationClient.connect();
return START_STICKY;
}
e nel metodo onConnected, mando una richiesta di posizione,
@Override
public void onConnected(Bundle arg0) {
System.out.println("Connected ...");
mLocationClient.requestLocationUpdates(REQUEST, this);
}
l'oggetto di richiesta è,
private static final LocationRequest REQUEST = LocationRequest.create()
.setInterval(5*60*1000) // 5 minutes
.setFastestInterval(3*60*1000) // 3 minutes
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
Ora il problema è,
- il metodo onLocationChanged non viene richiamato all'intervallo dato i.e 5 minuti o l'intervallo più veloce 3 minuti. Dal registro ho potuto vedere, è stato chiamato solo due o tre volte dopo che non è stato chiamato affatto (ho controllato dopo 1 ora).
Qual è il problema con il mio codice sopra ?. (Non riuscivo a vedere alcun log anche per "disconnesso")
- Per risolvere questo, ho provato a utilizzare alarmmanager per chiamare l'attività periodicamente. Ora come ottenere un singolo aggiornamento di posizione tramite Locationclient da un broadcastreceiver. (Locationclient.getLastlocation() restituisce solo ultima posizione memorizzata, ma non richiede una nuova posizione)
Sto riscontrando un problema molto simile. Ho eseguito un servizio rapido e sporco che viene eseguito periodicamente con un AlarmManager e chiamo getLastLocation ogni volta. La chiamata apparentemente restituisce una posizione, ma questa posizione non viene mai aggiornata. Ho scoperto che l'apertura dell'applicazione Google Maps (probabilmente funziona con altre applicazioni in grado di rilevare la posizione) rende improvvisamente ok le posizioni ricevute dal mio aggiornamento del servizio. Qualche idea di cosa potrebbe succedere? –
getlastlocation utilizza sempre provider passivi anziché GPS o provider di rete, il che significa solo quando qualsiasi altra app (come le mappe di Google) ottiene la posizione recente La nostra app userà lo stesso passivamente – ThiyagaB
Vuoi solo monitorare la posizione dell'utente quando la tua app è in esecuzione o anche quando è in background? – ddewaele