web-dev-qa-db-fra.com

Utilisation de Google Play Services LocationClient en service en arrière-plan

Mon application est conçue pour suivre périodiquement l'emplacement de l'utilisateur et l'envoyer au serveur.J'ai récemment changé mon code avec l'API de localisation des services Google play.

J'ai créé le client de localisation et je me suis connecté au service dans onStartCommand

public int onStartCommand(Intent intent, int flags, int startId) {
    setUpLocationClientIfNeeded();
    if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())
    mLocationClient.connect();
    return START_STICKY;

}

et dans la méthode onConnected, j'envoie une demande de localisation,

@Override
public void onConnected(Bundle arg0) {
    System.out.println("Connected ...");
    mLocationClient.requestLocationUpdates(REQUEST, this);

}

L'objet REQUEST est,

 private static final LocationRequest REQUEST = LocationRequest.create()
      .setInterval(5*60*1000)      // 5 minutes
      .setFastestInterval(3*60*1000) // 3 minutes
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

Maintenant, le problème est,

  1. la méthode onLocationChanged n'est pas appelée à l'intervalle donné, à savoir 5 minutes ou l'intervalle le plus rapide 3 minutes. D'après le journal que je pouvais voir, il ne s'appelle que deux ou trois fois après qu'il ne soit pas appelé du tout (j'ai vérifié après 1 heure).

Quel est le problème avec mon code ci-dessus?. (Je ne pouvais pas voir de journal pour "déconnecté" aussi)

  1. Pour résoudre ce problème, j'ai essayé d'utiliser alarmmanager pour appeler la tâche périodiquement. Maintenant, comment obtenir une mise à jour d'emplacement unique via Locationclient à partir d'un récepteur de diffusion. (locationclient.getLastlocation () ne renvoie que le dernier emplacement stocké mais ne demande pas de nouvel emplacement)
38
ThiyagaB

Code source complet pour un service d'arrière-plan disponible ici:

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

Essayez d'ajouter le super appel à votre 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
blackcj