Uso del servicio LocationClient de Google Play Services en segundo plano

Mi aplicación está diseñada para rastrear la ubicación del usuario periódicamente y enviarla al servidor. Recientemente he cambiado mi código con Google Play Services API de ubicación.

He creado el cliente de ubicación y conectado 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 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 la cuestión es,

  1. El método onLocationChanged no se recibe en el intervalo dado, es decir, 5 minutos o el intervalo más rápido de 3 minutos. Desde el registro que pude ver, es conseguir llamados sólo dos veces o tres veces después de que no se llama en absoluto (me registré después de 1 hora).

¿Cuál es el problema con mi código anterior ?. (No podía ver ningún registro de 'desconectado' también)

  1. Para solucionar 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.getLastlocation () sólo devuelve la última ubicación almacenada pero no solicita una nueva ubicación)

Código fuente completo para un servicio de fondo disponible aquí:

https://gist.github.com/blackcj/20efe2ac885c7297a676

Intenta agregar la super 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; } 
  • Cómo actualizar dinámicamente un elemento de superposición específico
  • ¿Cómo obtener la posición GPS actual sin esperar cambios de ubicación en Android?
  • Geofences no funciona cuando se mata la aplicación
  • ¿Cómo puedo obtener las coordenadas de un mapa al toque con MapFragment (no MapView)?
  • Cómo encontrar el código postal por latitud y logitud para el Reino Unido
  • ¿Cuál es el significado de android.location.LocationManager.PASSIVE_PROVIDER?
  • Android: Obtener ubicación reciente solamente, no getLastKnownLocation?
  • Cómo obtener el nombre de satélite o el número cuando estamos recibiendo la ubicación a través de GPS en Android?
  • Problemas de permiso para la ubicación en android Marshmallow applicaton
  • Ubicación de Android getBearing () devuelve siempre 0
  • Obtención de la ubicación actual de un dispositivo mediante la función {X} api
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.