Google Play Services: comment faire pour vérifier si il est actuellement “actif” dans l'attente de l'intention de rappel enregistré à l'emplacement des mises à jour/reconnaissance de l'activité?

ma demande de réaliser périodiquement des jour la localisation et de reconnaissance de l'Activité de détection en arrière-plan.

Je suis en train de faire qu'à l'aide de Google Play Services de l'API:

par exemple - pour vous inscrire à l'emplacement des mises à jour, j'ai dans l'attente de l'intention de recevoir de mise à jour:

mLocationClient.requestLocationUpdates(mLocationRequest, pendingInent);

pour annuler l'inscription à l'emplacement de mise à jour, je suis en train de faire les suivants:

mLocationClient.removeLocationUpdates(pendingInent);

c'est gentil, et fonctionne très bien.

mais comment puis-je savoir si il y a actuellement un pendingIntent la tenue de l'Intention de mes composants de l'application est actuellement inscrite en face de Google play services à l'emplacement de réception des mises à jour ou pas?

Je constate qu'il n'y a pas d'API pour vérifier cela, et le approche pour vérifier pendingIntent existence semble ne pas fonctionner pour l'API de google play services - dans l'attente de l'intention reste, même après que j'appelle le removeLocationUpdates() méthode.

Je sais que je peux économiser de l'état (partage de préférences) indiquant si maintenant je suis inscrit ou pas, mais ce n'est pas la bonne solution, et sera "buggy", car il peut arriver que google play est allé vers le bas, perdu le pendingIntent, mais mes processus de toujours penser que l'emplacement des mises à jour sont "actifs"..

même problème existe exactement pour la reconnaissance de l'activité des mises à jour.

Juste pour rendre les choses claires, tout ce que je veux faire est de fournir aux utilisateurs de mon application capacité à savoir si mon application est en train de recueillir les données en arrière-plan ou non, et de leur fournir un moyen de basculer entre que. Donc, si il ya d'autres façon de le faire de façon fiable - je vais à l'exception comme une réponse aussi

fiable = savoir si actuellement dans l'attente de l'intention vraiment enregistré à partir de google play services...

  • à l'aide de LocationListener n'est pas une option pour moi, parce que je dois être en mesure de recevoir des mises à jour de l'événement lors de mon processus est de crier vers le bas - ce qui est possible uniquement à l'aide de PendingIntent de rappel..

Merci d'avance.

Mise à JOUR

c'est le pendintIntent-je fournir pour s'inscrire ou se désinscrire à jour la localisation:

Intent locationUpdatesIntent = new Intent(context, LocationUpdatesIntentService.class);
PendingIntent pendingInent = PendingIntent.getService(context, 0, locationUpdatesIntent, PendingIntent.FLAG_UPDATE_CURRENT);

et c'est de cette façon que je suis en train de le vérifier (sans succès) si c'enregistrés ou non:

Intent locationUpdatesIntent = new Intent(context, LocationUpdatesIntentService.class);
PendingIntent pendingInent = PendingIntent.getService(context, 0, locationUpdatesIntent, PendingIntent.FLAG_NO_CREATE);
boolean isLocationUpdatesEnabled = (pendingIntent != null);

isLocationUpdatesEnabled retourne true événement après j'appelle removeLocationUpdates()

êtes-vous à l'aide de com.google.android.gms.location.LocationClient?
oui, pourquoi?
Selon les docs, LocationClient est obsolète et vous devriez être en utilisant LocationServices à la place. Voir ici: developer.android.com/reference/com/google/android/gms/location/...
Ne pas répondre à votre question, mais juste un heads-up.
Pouvez-vous montrer le code utilisé pour créer PendingIntent? Principalement intéressé à voir les drapeaux passé.

OriginalL'auteur Tal Kanel | 2014-08-07