Utilisation de Google Play Services LocationClient dans le service d’arrière-plan

Mon application est conçue pour suivre périodiquement l’emplacement de l’utilisateur et l’envoyer au serveur. Récemment, j’ai modifié mon code avec l’API de localisation des services Google Play.

J’ai créé le client de localisation et 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’object 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. À partir du journal, je pouvais voir, il n’était appelé que deux ou trois fois après cela, il n’était 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 régulièrement. Maintenant, comment obtenir une mise à jour d’emplacement unique via Locationclient à partir d’un émetteur de diffusion. (locationclient.getLastlocation () ne renvoie que le dernier emplacement stocké mais ne demande pas de nouvel emplacement)

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

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

Essayez d’append 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; }