it-swarm.com.de

Wie verwende ich die Android Geofencing-API?

Ich habe die neue Google Play Geofencing-Service-API getestet.

Ich habe den Beispielcode von der Android-Entwicklerseite heruntergeladen. Als Nächstes habe ich den Beispielcode auf einem Android-Gerät (Galaxy Note 2) ausgeführt. Ich legte meine Geo-Position und den Radius des Büros auf 10 m, aber als ich in mein Büro ging, passierte nichts.

Beim Ausführen des Beispielcodes habe ich festgestellt, dass nichts passiert, wenn ich mich bereits innerhalb des Geofence-Bereichs befinde und dann Geofence zu LocationClient hinzufüge.

Ich hatte bereits LocationClient Klassendokumentation gelesen und den folgenden Absatz gefunden:

Wenn der Netzwerkstandortanbieter vom Benutzer deaktiviert wird, wird der Geofence-Dienst nicht mehr aktualisiert, alle registrierten Geofences werden entfernt und eine Absicht wird durch die bereitgestellte ausstehende Absicht generiert. In diesem Fall gibt hasError(Intent) true zurück und getErrorCode(Intent) gibt GEOFENCE_NOT_AVAILABLE zurück. "

Also schaltete ich WiFi ein und ging zu meinem Büro (innerhalb des Geofence), und dann bekam ich die Benachrichtigung "Geofence hereed".

Ich habe folgende Fragen:

  1. Funktioniert Geofencing nur mit aktiviertem WLAN? 

  2. Warum funktioniert der von meinem 3G-Netzwerk bereitgestellte Standort nicht?

  3. Ist das ein Fehler im Beispielcode?

  4. Oder ist das mein Fehler?

21
kylee

Wenn Sie nur ein Mobilfunknetz verwenden, ist die Standortgenauigkeit geringer als die Genauigkeit von WLAN oder GPS (wenn Sie Google Maps öffnen, ist der blaue Kreis eine Schätzung Ihrer aktuellen Position. Wenn Sie nur 3GP verwenden, kann der Kreis einen Radius haben.) von sogar Hunderten von Metern).

In den letzten Tagen arbeite ich an einer App, die Geofences verwendet, und ich habe Folgendes herausgefunden: IMHO wird der Geofence-Eintrag nur ausgelöst, wenn sich ALLE "Standortschätzungskreis" innerhalb des Geofence-Radius befindet, dh wenn die Chance besteht, dass Sie den Geofence eingegeben haben . Es hängt also davon ab, wie groß der eingestellte Radius ist. Wenn Sie nur 10 Meter einstellen, funktioniert dies wahrscheinlich nur mit GPS, niemals mit 3GP. Für 3GP müssen Sie den Radius auf 1000 Meter einstellen.

Ich dachte, ich würde meine Ergebnisse hier teilen. Ich habe auch eine Labor-App entwickelt, die Google Play Services Location API und Geofence API implementiert. Meine Ergebnisse zeigen, dass der Positionsbestimmungscode eine Art pathologisches Unvermögen aufweist, Fehler zuzugeben. :)

Wenn eine Schaltfläche gedrückt wird, erstellt meine App eine Geofence am aktuellen Standort ("curLoc"), die von der Standort-API mit einem Radius von 30 Metern zurückgegeben wird. Auf dem Bildschirm zeige ich die Entfernung zum Geofence-Center ("distToCenter") an, indem Sie curLoc.distanceTo (fenceLoc) aufrufen und ungefähr jede Sekunde aktualisieren.

Ich starte die App und warte, bis sich die Genauigkeit stabilisiert (normalerweise bei 10,0 Metern). Dann drücke die Taste, um den Zaun zu erstellen. Ich bekomme sofort das "enter" -Ereignis. Ich kläre das Ereignis ab, gehe spazieren und komme scheinbar in eine Raum-Zeit-Anomalie. Ich gehe den Block hinunter und um die Ecke, und der distToCenter-Wert hat nur um etwa 4 Meter zugenommen. Ich gehe weiter, bis ich etwa 300 Meter von meinem Haus entfernt bin (durch Zählen von Schritten beurteilen) und das dstToCenter allmählich zunimmt. Das Geofence-Beendigungsereignis wird schließlich etwa 20 Sekunden ausgelöst, nachdem das dstToCenter über 30 Meter hoch ist. 

Ich warte ab, wo sich die Entfernung stabilisiert und es sind etwa 150 Meter. Ich drehe mich um und gehe zurück nach Hause, und die gleiche extreme Positionsverzögerung tritt auf. Ich setze mich an meinen Schreibtisch, während mein Wurmloch noch etwa 90 Meter entfernt ist. Nach ungefähr 40 Sekunden ist mein Doppelgänger in den Zaun geraten und nach weiteren 20 Sekunden bekomme ich das Eintrittsereignis. 

An diesem Punkt bin ich immer noch auf dem vorderen Bürgersteig (7,4 Meter entfernt) und schiebe mich bis zur Haustür.

ANMERKUNG: Die Quelle war durchgehend "verschmolzen", obwohl das Symbol für die GPS-Statusleiste angezeigt wurde und einige Sekunden lang blinkt, nachdem ich die Verbindung zu meinem WLAN verloren habe. Darüber hinaus ist die Genauigkeit nie von 10,0 Metern geschwächt. 

Lügner!

:)

1

in diesem Fall müssen Sie den Radius auf mindestens 1000 M erhöhen, da der aktuelle Standort von einem Netzbetreiber abgerufen wird. Der Standort wird jedoch in der Nähe des Netzwerkturms festgelegt. Bei GPS- und WLAN-Bedingungen funktioniert dies jedoch genauer (1 M ebenfalls).

1
RAHULRSANNIDHI

Wifi wird verwendet, um Ihren Standort zu ermitteln. Die Triangulation Ihrer Position mithilfe von WLAN-Signalen und Zellensignalen ist eine energieeffizientere Lösung als ein ständiges GPS-Fahren. Darüber hinaus funktioniert es in Situationen, in denen GPS keine starken Multipath-Bereiche und Innenräume bieten würde.

1
Njall

Ich habe die Geofence-Beispielanwendung getestet. Wenn WiFi deaktiviert ist, werden keine Geofence-Ereignisse unter Version 4.3 unter Android 4.3 erkannt.

Android 4.3 und höher funktioniert auch, wenn WLAN deaktiviert ist.

0
Prakash