Ich möchte eine App realisieren, die kontinuierlich die Position des Geräts an einen Web-Service sendet. Suchen Sie in der Dokumentation, habe ich Geolocation-Klasse gefunden und einige Artikel in der Positionsverfolgung diskutiert wird:Windows Phone 8.1 Standort-Tracking
- How to continuously track the phone's location for Windows Phone 8
- How to run location-tracking apps in the background for Windows Phone 8
beiden Beispielprojekte Umsetzung in diesen Artikeln diskutiert, ich habe Beachten Sie, dass das Ereignis geolocator_PositionChanged() nicht bei jeder Positionsaktualisierung ausgelöst wird. Es gibt eine Verzögerung (ca. 10/15 Minuten) zwischen 2 Ausführungen des Ereignisses. Das Seltsame ist, dass dies auch passiert, wenn die App im Vordergrund ausgeführt wird (nicht nur im Hintergrund). Ich verwende den Windows Phone-Emulator.
In meiner App habe ich ein Map-Steuerelement, wo ich die Position des Benutzers zeigen muss, und so muss das geolocator_PositionChanged() -Ereignis für jede Positionsaktualisierung korrekt und ohne Verzögerungen ausgelöst werden.
1) Wie kann ich die Position des Geräts mithilfe der Geolocator-Klasse (ohne Verzögerungen) verfolgen?
Beim Durchsuchen des Netzwerks habe ich die GeoCoordinateWatcher-Klasse gefunden, die eine kontinuierliche Positionsverfolgung des Geräts ermöglicht. Dies ist der Code:
public MainPage()
{
InitializeComponent();
this.GetCoordinate();
}
private void GetCoordinate()
{
var watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High)
{
MovementThreshold = 1
};
watcher.PositionChanged += this.watcher_PositionChanged;
watcher.Start();
}
private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
//Get position data
var pos = e.Position.Location;
//Update mypos object
mypos.update(pos.Latitude, pos.Longitude);
//Update data on the main interface
MainMap.SetView(mypos.getCoordinate(), MainMap.ZoomLevel, MapAnimationKind.Parabolic);
}
Es funktioniert: watcher_PositionChanged() Ereignis wird ohne Verzögerungen ausgelöst.
2) Warum hat der GeoCoordinateWatcher keine Verzögerungen? Was ist der Unterschied zwischen der GeoCoordinateWatcher-Klasse und der Geolocator-Klasse?
Schließlich sollte die App die Geräteposition an den Web-Service senden, auch wenn sie nicht aktiv ist. Also, ich brauche eine Hintergrundaufgabe. Wie von Romasz vorgeschlagen here, kann ich die Geolocator-Klasse mit einigen Einschränkungen verwenden.
3) Kann ich GeoCoordinateWhatcher im Hintergrund verwenden? Wenn ja, wie?
Mein Ziel ist es, eine Positions-Tracking-App ohne Verzögerungen zu realisieren, die sogar im Hintergrund funktioniert. Was ist der beste Weg, dies zu tun? Die App sollte die Position des Geräts verfolgen und den Web-Service kontinuierlich aktualisieren (auch im Hintergrund). Wie kann ich das machen? Was ist der beste Ansatz? Ich kenne den Windows Phone Apps-Lebenszyklus und kann einige Einschränkungen für die Hintergrundausführung akzeptieren. Was sind die Grenzen des Hintergrunds?
Vielen Dank Gavin für Ihre Antwort. Bitte, können Sie genauer sein? Gibt es einige Microsoft-Dokumentation? Wenn dies in Windows Phone 8 möglich ist, wie wird es realisiert und warum wird diese Funktion von Windows Phone 8.1 entfernt? –
Ich habe tatsächlich nach Links gesucht, um meine Aussage zu sichern, als ich diese Antwort gepostet habe, aber nichts Konkretes finden konnte. Ich erhielt diese Informationen auf einer Windows Phone 8.1 Kickstart-Veranstaltung, die im April 2014 von Hannes Nel veranstaltet wurde. Er stellte nützliche Folien zur Verfügung, die zeigten, wo welche APIs in den verschiedenen 8 und 8.1-Varianten von Windows Phone-Projekten verfügbar waren. Der Grund, warum ich mich so gut an diese Tatsache erinnere, ist, dass ich ein Lumia 820 für die Beantwortung einer Frage gewonnen habe, in der gefragt wurde, was nur mit Windows Phone 8 APIs und nicht mit 8.1 APIs möglich ist. Ich war enttäuscht, dass ich meine App deswegen nicht auf 8.1 upgraden kann. – Gavin
Es wird hier angegeben: http://msdn.microsoft.com/en-us/library/windowsphone/develop/dn642084(v=vs.105).aspx> Kontinuierliche Hintergrundausführung wird für Silverlight 8.1 apps – Depechie