2013-07-11 1 views
15

Ich möchte wissen, wann ein Benutzer ankommt oder einen bestimmten Standort verlässt. Ich habe versucht, dies über das drahtlose Netzwerk (überprüfen Sie für mobile Geräte), aber ich konnte aus mehreren Gründen nicht.Wie kann ich den Standort des Geräts (iOS und Android) mithilfe von Phonegap verfolgen?

1) Ich benötigte Echtzeit-Updates oder alle 1 - 5 Minuten der Informationen darüber, welche Geräte angeschlossen sind und welche Geräte gerade getrennt wurden.

2) Ich hatte sehr hohen Ping von meinem PC zu meinem iPhone im selben Netzwerk (weiß immer noch nicht warum).

Jetzt möchte ich es mit Geolocation von einer Phonegap-Anwendung (im Hintergrund ausgeführt) auf iOS oder im Hintergrund in Android ausgeführt ausführen.

Jede Hilfe wäre willkommen.

Antwort

24

Das erste, was zu sagen ist, dass das Erstellen einer Phonegap-App, die Standortaktualisierungen erhält, während sie im Hintergrund läuft, durchaus möglich, aber nicht trivial ist. Ich habe es selbst gemacht und veröffentlichte Apps sowohl auf der Android- als auch auf der iOS-Plattform.

Wenn Sie genaue und regelmäßige Positionsaktualisierungen benötigen, empfehle ich, den GPS-Empfänger auf den Zielgeräten zu verwenden. In Phonegap können Sie das Flag "highAccuracy" setzen, wenn Sie Positionsaktualisierungen anfordern. Die watchPosition() Funktion wird für neue Positionsinformationen liefern, wie und wann das Gerät Updates vom GPS-Empfänger empfängt, so dass Sie es so etwas wie folgt verwenden:

navigator.geolocation.watchPosition(successCallback, errorCallback, { 
    enableHighAccuracy: true, 
    timeout: 10000, 
    maximumAge: 0 
}); 

die Phonegap geolocation API documentation für mehr Details (die Berechtigungen beachten, die erforderlich sind um dies auf Android und iOS funktionieren zu lassen).

Damit Ihre App auf Android oder iOS im Hintergrund läuft, müssen Sie ihre jeweiligen nativen Entwicklungsumgebungen einrichten: Eclipse für Android, XCode für iOS. Sie können Phonegap Build nicht verwenden, da in beiden Fällen benutzerdefinierte Einstellungen erforderlich sind, damit es funktioniert. Sehen Sie die Phonegap platform guides für wie dies zu tun ist.

Um Ihre App im Hintergrund auf Android zu halten, müssen Sie entweder einen benutzerdefinierten Android-Dienst schreiben, oder Sie könnten tun, was ich tat und ein Phonegap-Plugin verwenden, um eine "partielle wakelock" (see here) zu erhalten App läuft im Hintergrund und empfängt Positions-Updates, während der Bildschirm ausgeschaltet ist. Beachten Sie, dass die original version dieses Plugins veraltet ist und nicht mit neueren Versionen von Phonegap funktioniert und auch keine partiellen Wakelocks unterstützt. Ich habe es jedoch für meinen eigenen Gebrauch aktualisiert und erweitert: Sie finden den Quellcode dafür in meiner Antwort auf this question.

Damit Ihre App im Hintergrund auf iOS läuft, müssen Sie die Dinge ein wenig anders machen. Sie brauchen kein Plugin, nur eine Projekteinstellung.

Sie können entweder das Projekt .plist manuell bearbeiten und den Schlüssel "UIBackgroundModes" mit dem Wert "location" hinzufügen oder, bei geöffnetem Projekt in XCode, die Taste "Required Background Modes" mit dem Wert "hinzufügen App registriert sich für Standortaktualisierungen ". Dies führt dazu, dass iOS die mit watchPosition() registrierte JS-Rückruffunktion jedes Mal auslöst, wenn eine Standortaktualisierung empfangen wird. See here für mehr über iOS-Projektschlüssel und background modes.

Hoffe, das hilft!

+0

Vielen Dank für Ihre Antwort, ich brauche das Gerät, um den Standort alle 5 Minuten zu aktualisieren, kann ich das kontrollieren, oder? Es sollte funktionieren, solange das Gerät über eine Internetverbindung verfügt. – amarruffo

+1

Wenn Sie die Position in einem festen Intervall aktualisieren möchten, können Sie eine Zeitüberschreitung verwenden, um getCurrentPosition() aufzurufen, z. 'SetTimeout (function() {navigator.geolocation.getCurrentPosition (successCallback, errorCallback, {enableHighAccuracy: true})}, 5 * 60 * 1000)' Wenn das Gerät GPS-Empfänger verfügt, brauchen Sie keine Internetverbindung Position zu erhalten Aktualisierung. – DaveAlden

+2

Was passiert, wenn ich den Standort über einen Webservice in eine Datenbank einfügen möchte? Wird das vom Hintergrund ausgehen? Ich habe irgendwo gelesen, dass der Webservice nicht angerufen wird, irgendwelche Ideen dazu? Danke für Ihre Hilfe. – amarruffo