Uso de Google Play Services LocationClient en el servicio en segundo plano
Mi aplicación está diseñada para rastrear la ubicación del usuario periódicamente y enviarla al servidor, Recientemente cambié mi código con la API de ubicación de Google play Services.
Creé el locationclient y me conecté al servicio en onStartCommand
public int onStartCommand(Intent intent, int flags, int startId) {
setUpLocationClientIfNeeded();
if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())
mLocationClient.connect();
return START_STICKY;
}
Y en el método onConnected, envío una solicitud de ubicación,
@Override
public void onConnected(Bundle arg0) {
System.out.println("Connected ...");
mLocationClient.requestLocationUpdates(REQUEST, this);
}
El objeto de SOLICITUD es,
private static final LocationRequest REQUEST = LocationRequest.create()
.setInterval(5*60*1000) // 5 minutes
.setFastestInterval(3*60*1000) // 3 minutes
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
Ahora la cuestión es,
- el método onLocationChanged no se llama en el intervalo dado, es decir, 5 minutos o el intervalo más rápido 3 minutos. Desde el registro que pude ver, su conseguir llamado solo dos o tres veces después de que su no conseguir llamado en absoluto (he comprobado después de 1 hora).
¿Cuál es el problema con mi código anterior?. (No pude ver ningún registro de 'disconnected' también)
- Para resolver esto, traté de usar alarmmanager para llamar a la tarea periódicamente. Ahora cómo obtener una actualización de ubicación única a través de Locationclient desde un broadcastreceiver. (locationclient.Solo getLastLocation() devuelve la última ubicación almacenada pero no está solicitando una nueva ubicación)
38
1 answers
El código fuente completo para un servicio en segundo plano está disponible aquí:
Https://gist.github.com/blackcj/20efe2ac885c7297a676
Intente agregar la super llamada a su onStartCommand.
/**
* Keeps the service running even after the app is closed.
*
*/
public int onStartCommand (Intent intent, int flags, int startId)
{
super.onStartCommand(intent, flags, startId);
setUpLocationClientIfNeeded();
if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())
{
mLocationClient.connect();
}
return START_STICKY;
}
35
Author: blackcj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-07 18:44:56
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-07 18:44:56