Systemy mobilne Laboratorium Dostęp do danych GPS w Windows Phone 7
1. Wprowadzenie Laboratorium ma na celu zapoznanie się z narzędziami dostępu do danych dotyczących lokalizacji w urządzeniach mobilnych wyposażonych w system Windows Phone 7. W ramach laboratorium dane z sensora będą symulowane w emulatorze. Wytwarzanie symulowanych danych, będzie jednym z zadań do wykonania podczas laboratorium. 2. Zadania do wykonania Zadanie 1. Dostęp do GPS Wprowadzenie Według specyfikacji platformy, wszystkie telefony z Windows Phone 7 będą wyposażone w system agps. Programiści mogą uzyskać dostęp do informacji o lokalizacji przy pomocy klas zawartych w przestrzeni System.Device.Location, która jest wspierana od.net w wersji 4. Szczególnie użyteczna będzie klasa GeoCoordinateWatcher. GPS inicjalizuje się w następujący sposób: private IGeoPositionWatcher<GeoCoordinate> _Watcher; _Watcher = new System.Device.Location.GeoCoordinateWatcher(); _Watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged); _Watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged); _Watcher.Start(); Następnie należy napisać handlery zdarzeń, które będą aktualizowały dane o pozycji i stanie urządzenia. Może to wyglądać na przykład tak: void watcher_positionchanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) { Deployment.Current.Dispatcher.BeginInvoke(() => MyPositionChanged(e)); } void MyPositionChanged(GeoPositionChangedEventArgs<GeoCoordinate> e) {
} LatitudeTextBlock.Text = e.position.location.latitude.tostring("0.000"); LongitudeTextBlock.Text = e.position.location.longitude.tostring("0.000"); Handler wywołuje tutaj metodę MyPositionChanged przy pomocy Invoke, tak aby wykonała się ona na wątku GUI. Przykładowy projekt Jeżeli nie udało Ci się przeprowadzić tych działań samodzielnie, możesz pobrać przykładową aplikację, podobnie jak przy akcelerometrze. Znajdziesz w katalogu robocznym laboratorium GPS/Etap0. Emulacja GPS a Do niedawna nie istniało żadne rozwiązanie pozwalające testować wskazania GPS u na emulatorze, jednak uległo to zmianie. 29.11.2011 na blogu developerów Windows Phone 7 opisano emulator do systemu GPS (vide materiały do ćwiczenia). Jest to mała aplikacja napisana w WPFie oraz biblioteka dla WP7, które pozwalają debugować aplikacje wykorzystujące lokalizacje w emulatorze. Po zakończeniu testów, aby aplikacja działała na telefonie, należy tylko zakomentować jedną linijkę kodu. Przy pomocy emulatora można zaznaczyć lokalizację gdziekolwiek na Ziemi korzystając z GUI wyświetlającego mapy. Jest to bardzo przyjemne rozwiązanie. Pakiet emulatora zawiera bibliotekę GPSEmulatorClient. Zawiera ona klasę GeoCoordinateWatcher, czyli o tej samej nazwie jak wspomniana wyżej System.Device.Location.GeoCoordinateWatcher. Obie klasy implementują ten sam interfejs IGeoPositionWatcher. Dzięki temu mamy pewność, że sztuczny GeoCoordinateWatcher posiada to samo API, co System.Device.Location.GeoCoordinateWatcher, a więc z punktu widzenia programisty używa się ich w ten sam sposób. Aby nasze aplikacje działały zarówno w emulatorze, jak i docelowym urządzeniu, dokonamy następujących kroków: W pierwszej linii kodu źródłowego aplikacji, należy dodać linię: #define GPS_EMULATOR
Gdy będziemy chcieli zdeployowac aplikację na urządzenię, tę linię należy wykomentować. Inicjalizację GPSa trzeba przeprowadzić w nieco inny sposób, niż opisano powyżej: private IGeoPositionWatcher<GeoCoordinate> _Watcher; #if GPS_EMULATOR _Watcher = new GpsEmulatorClient.GeoCoordinateWatcher(); #else _Watcher = new System.Device.Location.GeoCoordinateWatcher(); #endif Dalej już nic się nie zmienia dołączenie zdarzeń i ich obsługa pozostają bez zmian. Wystarczy teraz uruchomić aplikację symulującą urządzenie GPS, oraz uruchomić program. Który np. będzie wyświetlał pozycję i stan urządzenia w formie tekstowej. Powinno to wyglądać mniej więcej tak: Zadanie 3. Wizualizacja Dane pochodzące z urzadzenia GPS powinny być prezentowane w formie tabeli długość, szerokość, czas. - aplikacja powinna umożliwiać zapis i odczyt danych z GPS
- aplikacja powinna wyświetlać tzw. różę wiatrów, przedstawiająca północ w stosunku do aktualnego kierunku obliczanego na podstawie danych z GPS. UWAGA!! W przypadku problemów z emulatorem GPS należy zwrócić się do prowadzącego o pomoc. Źródła http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/09/08/using-theaccelerometer-on-windows-phone-7.aspx http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/01/28/windows-phonegps-emulator.aspx http://msdn.microsoft.com/en-us/library/ff431744(v=vs.92).aspx