Ich habe Probleme beim Senden einer Zeichenfolge mit meinem PendingIntent
, die ich an LocationServices.FusedLocationApi.requestLocationUpdates(GoogleApiClient client, LocationRequest request, PendingIntent callbackIntent)
übergebe.
Es scheint, dass der Username extra, den ich auf die Intent
setze, den Speicherort, den requestLocationUpdates
versucht, an meine IntentService
zu übergeben, wie intent.getParcelableExtra(FusedLocationProviderApi.KEY_LOCATION_CHANGED)
returns null
.
BEARBEITEN
Ich habe versucht, eine User
-Klasse zu erstellen, die Parcelable
implementiert und sie als Extra hinzufügt:
und ich habe auch versucht, das Parcelable User
in ein Bundle
einzufügen, wie es in diesem Fehlerbericht per Kommentar vorgeschlagen wurde Ссылка :
in meinem Dienst:
%Vor%Allerdings hat keiner dieser Ansätze einen Unterschied gemacht. Immer, wenn ich etwas extra auf meine Absicht lege, wird der Ort nie zu der Absicht hinzugefügt, wenn die Aktualisierungen stattfinden.
Ich habe diese IntentService
eingerichtet, um die Aktualisierung von Standorten zu übernehmen:
Wenn der Benutzer auf eine Schaltfläche klickt, wird startLocationUpdates
in meiner Hauptaktivität aufgerufen:
Hauptaktivitätsklasse:
%Vor% Das alles funktioniert gut und gut; Wenn der Benutzer den Knopf drückt, wird toggleLocationUpdates
aufgerufen, was LocationServices.FusedLocationApi.requestLocationUpdates
aufruft, was mein LocationUpdateService
aufruft, wo ich den Ort abrufen kann.
Das Problem kommt, als ich versucht habe, einen String extra in meine Intent
einzufügen, indem ich Intent.putExtra (String, String) verwende:
Hauptaktivitätsklasse:
%Vor%BEARBEITEN Ich hatte den nächsten Satz als Anweisung und nicht als Frage gestartet: "Ich benutze ..."
Verwende ich den richtigen Ansatz, um einige zusätzliche Daten an diese Standortaktualisierung mit IntentService
zu senden, oder gibt es eine vernünftigere Vorgehensweise?
Ist das ein Fehler oder nur eine schlechte Dokumentation?
Die Verwendung des IntentService, der mit der FusedLocationProviderAPI gekoppelt ist, führt zu Problemen. In den Entwicklerdokumenten mit dem Titel Empfangen von Standortaktualisierungen :
Abhängig von der Form der Anforderung der verknüpfte Standortanbieter ruft entweder den
LocationListener.onLocationChanged()
-Rückruf auf Methode und übergibt es ein Location-Objekt oder gibt einePendingIntent
das aus enthält den Standort in seinen erweiterten Daten. Die Genauigkeit und Häufigkeit der Updates werden von den Standortberechtigungen beeinflusst, die Sie haben angefordert und die Optionen, die Sie im Standortanforderungsobjekt festlegen
Außerdem wird ein PendingIntent
verwendet, um Berechtigungen für einen anderen Codeabschnitt ( FusedLocationProviderAPI
in Google Play Services) zu erweitern, um ihren Code innerhalb Ihrer apk auszuführen. Ein IntentService
wird verwendet, um einen Dienst zu starten, der im Rahmen Ihrer apk definiert ist.
Die Methode erfordert also eine Implementierung von LocationListener
für Vordergrundaktualisierungen oder eine PendingIntent
für Hintergrundaktualisierungen, die mit einem Broadcastempfänger gekoppelt sind.
Dies ist ein funktionierendes Beispiel für einige Methoden, die verwendet werden, um Ortsaktualisierungen von einem PendingIntent
in Verbindung mit zusätzlichen Werten anzufordern.
Hinweis: LocalStorage.java
ist eine Dienstprogrammklasse zum Speichern lokaler Variablen. Sie ist nicht Teil der Android API
GPS-Plotter
%Vor%BackgroundLocationReceiver
%Vor% BEARBEITEN
Die folgende Methode erstellt eine LocationRequest, die zum Aufrufen der Methode requestLocationUpdates()
BEARBEITEN Nach einer langen Diskussion im Chat mit Catherine kamen wir zu dem Schluss, dass die google play services-Bibliothek 7.5 einen Fehler hat, der den Parcelable Extra Location, der von FusedLocationProviderAPI übergeben wurde, nicht verarbeitet, wenn andere Extras in den Intent eingefügt werden. 7.0 bietet diese Fähigkeit jedoch. Sie sagte, dass sie einen Bug einreichen wird und wir sehen, wie lange das Android-Team braucht, um
zu lösen