38 votes

Utilisation des services Google Play LocationClient en arrière-plan

Mon app est conçu pour le suivi de l'emplacement de l'utilisateur périodiquement et de l'envoyer au serveur, j'ai Récemment changé mon code avec Google play services de l'Emplacement de l'API.

J'ai créé le locationclient et connecté au service en onStartCommand

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

}

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

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

}

L'objet de la REQUÊTE 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 la question est,

  1. le onLocationChanged méthode n'est pas appelée à l'intervalle donné que je.e à 5 minutes ou la plus rapide de l'intervalle de 3 minutes. Dans le journal j'ai pu voir, son être appelé que deux fois ou trois fois, après que ses pas appelé du tout ( j'ai vérifié après 1 heure).

Quel est le problème avec mon code ci-dessus?. ( Je ne pourrais pas voir n'importe quel journal pour "déconnecté" aussi)

  1. Pour résoudre ce problème, j'ai essayé d'utiliser alarmmanager à l'appel de la tâche périodique. Maintenant, comment obtenir un seul emplacement de mise à jour par le biais de Locationclient à partir d'un broadcastreceiver. (locationclient.getLastlocation() ne retournera la dernière position mémorisée, mais il ne demande pas à un nouvel emplacement)

35voto

blackcj Points 676

Le code source complet pour un service en arrière-plan est 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;
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X