android - servicios - no puedo actualizar google play services
Uso de Google Play Services LocationClient en el servicio en segundo plano (1)
Mi aplicación está diseñada para rastrear periódicamente la ubicación del usuario y enviarla al servidor. Recientemente cambié mi código con la API de ubicación de los servicios de reproducción de Google.
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 Conectado, envío una solicitud de ubicación,
@Override
public void onConnected(Bundle arg0) {
System.out.println("Connected ...");
mLocationClient.requestLocationUpdates(REQUEST, this);
}
El objeto REQUEST 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 el problema 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. Del registro que pude ver, se llama solo dos o tres veces después de que no se llama en absoluto (lo verifiqué después de 1 hora).
¿Cuál es el problema con mi código anterior? (No pude ver ningún registro de ''desconectado'' también)
- Para resolver esto, traté de usar alarmmanager para llamar la tarea periódicamente. Ahora, cómo obtener una única actualización de ubicación a través de Locationclient desde un receptor de difusión. (locationclient.getLastlocation () solo devuelve la última ubicación almacenada pero no solicita una nueva ubicación)
El código fuente completo para un servicio en segundo plano está disponible aquí:
https://gist.github.com/blackcj/20efe2ac885c7297a676
Intenta agregar la súper llamada a tu 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;
}