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 dePendingIntent
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()
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
Vous devez vous connecter pour publier un commentaire.
Suivantes sont les scénarios lorsqu'une
PendingIntent
est supprimé:PendingIntent
peut être retirée explicitement en appelantPendingIntent.cancel
, que par l'application qui l'a créé. À partir de la docs:PendingIntent
, si inactif, c'est à dire ne pas être utilisé par une autre application, est enlevé par le système lorsque l'application se termine.PendingIntent
, si active, c'est à dire d'être utilisé par une autre application, est enlevé par le système uniquement lorsque le package de l'application est désinstallée.D'où
removeLocationUpdates
indique que le système de services de Localisation de Google non plus de références à laPendingIntent
. Il n'a pas le retirer du système. Donc, vous devrez appelercancel
surPendingIntent
de l'enlever, ce qui est absolument parfait.Informations supplémentaires à partir de la docs:
viens de vérifier. en regardant une grande! comme vous l'avez dit, appelant annuler() semble faire la job!!! merci beaucoup pour votre réponse!! J'étais déjà un peu sceptique il y a vraiment de solution à ce.. super pour apprendre quelque chose de nouveau!
OriginalL'auteur Manish Mulimani
Informer l'utilisateur de l'application est la collecte de données en arrière-plan avec une mesure de notification dans la barre d'état. La notification à l'utilisateur à l'endroit où ils peuvent arrêter l'enregistrement.
L'exemple ci-dessous est une partie d'un service. Le démarrage et l'arrêt contrôlé par un booléen passé avec l'intention utilisé pour démarrer le service. Lorsque votre application suspend le service d'enregistrement des données de base et de la notification qui permet à l'utilisateur de revenir à votre application pour arrêter l'arrière-plan de l'enregistrement des données.
Lors de l'enregistrement de startForeground à l'état de l'affichage de la barre de notification. Lorsque vous n'utilisez pas stopForeground(true) pour supprimer la notification.
Je pensais que j'avais tout couverts de capacité de savoir si l'application est la collecte de données (notification) avec une façon de bascule (avis d'intention). Ne collecte pas de données pas de notification.
Merci beaucoup pour votre réponse. Outre le fait que je ne veux pas montrer à l'utilisateur ce undissmisable notification, cette approche ne fonctionnera pas pour l'enregistrement de l'emplacement des mises à jour avec pendingIntent de rappel, parce que pendingIntent peut encore être enregistrée si mon Service, et même de la totalité de mon processus est arrêté
Désolé, je ne pouvais pas les aider. Votre aller pour en attendant l'intention si votre processus peut être éveillée par l'emplacement. C'est une bonne raison. Je suis juste séances de remue-méninges. Vous pourriez putextra un numéro séquentiel dans l'attente de votre intention. Magasin lastnumberreceived et lastnumbersent en statique séquentielle des variables et utiliser la différence entre les deux pour déterminer si les intentions ont été perdus.
Merci pour ce partage d'idées! Je l'Apprécie .. j'espère qu'il y a de plus trivial et fiable/officielle et directe de la solution sans solution, astuces, et espère que cette prime sera d'apporter cette solution
OriginalL'auteur danny117