Google Play Dienste: wie zu überprüfen, ob die derzeit "aktiven" pending intent-callback registriert, um Standort-updates/Aktivität Anerkennung?

meine Anwendung führen Sie regelmäßige Standort-updates und-Aktivität-Anerkennung-Erkennung im hintergrund.

Ich mache das mit den Google Play Services API:

zum Beispiel - zu registrieren, um Standort-updates, die ich pending intent zu erhalten update:

mLocationClient.requestLocationUpdates(mLocationRequest, pendingInent);

um die Registrierung zu-Standort-update, ich mache Folgendes:

mLocationClient.removeLocationUpdates(pendingInent);

das ist schön, und funktioniert Super.

aber wie finde ich heraus, ob es aktuell einen pendingIntent holding Absicht, um meine Anwendung Komponente ist bereits angemeldet vor der Google play-Dienste zu erhalten, location updates oder nicht?

Ich bemerkt, dass es keine API, um diese zu überprüfen, und die Ansatz zu prüfen, pendingIntent Existenz scheint nicht zu funktionieren für die API gegen die google play-Dienste - die ausstehende Vorsatz bleibt vorhanden, auch nachdem ich den Anruf removeLocationUpdates() Methode.

Ich weiß, ich kann Zustand speichern (shared preferences), die angibt, ob ich nun registriert bin oder nicht, aber es ist nicht die richtige Lösung, und "buggy", weil es passieren kann, dass google play-Verfahren ging, verloren die pendingIntent, aber mein Prozess immer noch denken, dass die location-updates sind "aktive"..

gleiche problem genau besteht für die Tätigkeit Anerkennung updates.

Nur klar machen, alles was ich tun möchte, ist zu den Benutzern meiner Anwendung Fähigkeit zu wissen, wenn meine app ist derzeit die Erhebung von Daten im hintergrund läuft oder nicht, und Ihnen eine Möglichkeit zum Umschalten zwischen. Also, wenn es andere Wege, das zu tun, in zuverlässiger Weise - ich werde außer es als Antwort auch

zuverlässige Art = zu wissen, ob derzeit die angemeldete Absicht, wirklich Flagge aus der google-play-services...

  • mit LocationListener ist keine option für mich, denn ich muss in der Lage sein, um updates zu erhalten-Ereignis aus, wenn mein Prozess ist Schreien nach unten - was ist möglich nur mit PendingIntent Rückruf..

Vielen Dank im Voraus.

UPDATE

dies ist die pendintIntent, die ich zum registrieren und aufheben der Registrierung, um den aktuellen Standort:

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

und das ist wie ich bin versucht zu überprüfen (erfolglos) wenn Sie registriert sind oder nicht:

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

isLocationUpdatesEnabled gibt true zurück, Fall, nachdem ich call removeLocationUpdates()

verwenden Sie com.google.android.gms.location.LocationClient?
ja, warum?
Laut der docs, LocationClient ist veraltet und Sie sollten mit LocationServices statt. Siehe hier: developer.android.com/reference/com/google/android/gms/location/...
Nicht beantworten Ihre Frage, aber nur ein heads-up.
Kann man den code zum erstellen PendingIntent? Hauptsächlich daran interessiert, dass die flags übergeben, um es.

InformationsquelleAutor Tal Kanel | 2014-08-07

Schreibe einen Kommentar