Chcę zrealizować aplikację, która nieustannie wysyła pozycję urządzenia do usługi sieciowej. Patrząc w dokumentacji, Znalazłem klasa geolokalizacji i niektóre artykuły gdzie pozycja śledzenia omówiono:Windows Phone 8.1 śledzenie lokalizacji
- 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
Realizacja obu projektów przykładowych omawianych w tych artykułach, nie mam Zauważyłem, że zdarzenie geolocator_PositionChanged() nie jest uruchamiane przy każdej aktualizacji pozycji. Wystąpiło opóźnienie (około 10/15 minut) między 2 wykonaniem zdarzenia. Dziwne jest to, że dzieje się tak nawet wtedy, gdy aplikacja jest uruchamiana na pierwszym planie (nie tylko w tle). Używam emulatora Windows Phone.
W mojej aplikacji mam kontrolę mapy, gdzie potrzebuję pokazać pozycję użytkownika, a więc potrzebuję, aby zdarzenie geolocator_PositionChanged() zostało poprawnie uruchomione dla każdej aktualizacji pozycji, bez opóźnień.
1) Jak mogę śledzić (bez opóźnień) pozycję urządzenia za pomocą klasy Geolocator?
Przeszukując sieć, znalazłem klasę GeoCoordinateWatcher, która zapewnia ciągłe śledzenie pozycji urządzenia. Jest to kod:
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);
}
Działa: watcher_PositionChanged() zdarzenie jest zwolniony bez opóźnień.
2) Dlaczego GeoCoordinateWatcher nie ma opóźnień? Jaka jest różnica między klasą GeoCoordinateWatcher a klasą Geolocator?
Wreszcie aplikacja powinna przesłać pozycję urządzenia do serwisu internetowego, nawet jeśli nie jest aktywna. Potrzebuję zadania w tle. Zgodnie z propozycją here Romasz, mogę korzystać z klasy Geolocator z pewnymi ograniczeniami.
3) Czy mogę używać GeoCoordinateWhatcher w tle? Jeśli tak, w jaki sposób?
Moim celem jest realizacja aplikacji śledzenia pozycji bez opóźnień, która działa nawet w tle. Jaki jest najlepszy sposób na zrobienie tego? Aplikacja powinna śledzić położenie urządzenia i stale aktualizować serwis internetowy (nawet w tle). Jak mogę to zrobić? Jakie jest najlepsze podejście? Wiem o cyklu życia Aplikacji Windows Phone i mogę zaakceptować pewne ograniczenia dotyczące wykonywania w tle. Jakie są ograniczenia tła?
Dziękuję Gavin za odpowiedź. Proszę, czy możesz być bardziej konkretny? Czy jest jakaś dokumentacja Microsoft? Jeśli jest to możliwe w systemie Windows Phone 8, jak go zrealizować i dlaczego usunąć tę funkcję z systemu Windows Phone 8.1? –
Po wyszukaniu tej odpowiedzi rzeczywiście szukałem linków do kopii zapasowej mojego wyciągu, ale nie mogłem znaleźć nic zwięzłego. Dostałem tę informację podczas imprezy Kickstart w systemie Windows Phone 8.1, której gospodarzem był Hannes Nel w kwietniu 2014 r. Zapewnił on przydatne slajdy pokazujące, jakie API są dostępne i które nie były dostępne w różnych 8 i 8 wersjach smaków projektów Windows Phone. Powodem, dla którego dobrze pamiętam ten fakt, jest to, że wygrałem Lumię 820 za udzielenie odpowiedzi na pytanie, co było możliwe tylko w Windows 8 API, a nie 8.1 API. Byłem rozczarowany, ponieważ nie mogłem z tego powodu uaktualnić mojej aplikacji do wersji 8.1. – Gavin
Jest to powiedziane tutaj: http://msdn.microsoft.com/en-us/library/windowsphone/develop/dn642084(v=vs.105).aspx> Ciągłe wykonywanie w tle nie jest obsługiwane dla aplikacji Silverlight 8.1 – Depechie