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,

  1. 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)

  1. 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)
Author: ThiyagaB, 2013-06-03

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