Windows Phone Mango – nowe możliwości emulatora  

Udostępnij na: Facebook

Autor: Maciej Grabek

Opublikowano: 2011-07-06

Pobierz i uruchom

Wprowadzenie

Najnowsza odsłona narzędzi deweloperskich dla platformy Windows Phone 7.1. o nazwie kodowej Mango przyniosła wiele zmian nie tylko z punktu widzenia API dostępnego dla programistów, lecz również zmiany w kontekście samych narzędzi.

Po przeczytaniu tego artykułu poznasz nowe możliwości emulatora urządzenia, pozwalające testować działanie aplikacji korzystających z akcelerometru oraz odbiornika GPS bez konieczności posiadania fizycznego urządzenia.

Emulacja akcelerometru

Pierwszą istotną zmianą jest dodanie wsparcia dla emulacji akcelerometru. Do tej pory w społeczności programistów powstało wiele różnych bibliotek i aplikacji, które miały na celu umożliwienie pracy z akcelerometrem w fazie tworzenia aplikacji nawet bez dostępu do fizycznego urządzenia.

Twórcy narzędzi uwzględnili tę potrzebę i w nowej wersji emulatora dodali możliwość symulowania zachowania sygnałów wysyłanych przez urządzenie nawet wtedy, gdy aplikacja działa na emulatorze. Aby przetestować tę możliwość, przygotujemy nową aplikację opartą na szablonie Windows Phone Application. Na głównej stronie aplikacji dodamy pola tekstowe, które będą wyświetlać interesujące nas dane pobrane z akcelerometru. Oto kod, który realizuje odczyt danych pochodzących z sensora i ich wyświetlanie na ekranie:

Accelerometer acc = new Accelerometer();
acc.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(acc_ReadingChanged);
acc.Start();

void acc_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
    this.tbxAccelerometerX.Dispatcher.BeginInvoke(delegate { this.tbxAccelerometerX.Text = e.X.ToString("X: 0.00"); });
    this.tbxAccelerometerY.Dispatcher.BeginInvoke(delegate { this.tbxAccelerometerY.Text = e.Y.ToString("Y: 0.00"); });
    this.tbxAccelerometerZ.Dispatcher.BeginInvoke(delegate { this.tbxAccelerometerZ.Text = e.Z.ToString("Z: 0.00"); });
}

W tym momencie możemy uruchomić aplikację. Różnica między nową a starą wersją emulatora widoczna jest w postaci niewielkiego przycisku oznaczonego symbolem >>, który jest zaznaczony na rysunku 1.

Rysunek 1. Przycisk pokazujący dodatkowy panel emulatora.

Po wybraniu tej opcji pojawia się panel, który oferuje dodatkowe możliwości ułatwiające testowanie aplikacji wzbogaconych między innymi o wykorzystanie akcelerometru. Jest on widoczny na rysunku 2.

Rysunek 2. Dodatkowy panel emulatora – widok akcelerometru.

Mamy tu model urządzenia osadzony w przestrzeni, którym możemy swobodnie manipulować, zwyczajnie przeciągając różowy punkt po powierzchni oznaczonej okręgiem. Powoduje to jednocześnie zmianę wyświetlanych w podglądzie wartości wysyłanych do urządzenia. Dużym ułatwieniem przy testach jest możliwość wybrania układu odniesienia, dzięki któremu możemy zdecydować, czy telefon leży, czy jest w pozycji pionowej oraz dodatkowo – czy jest ułożony wertykalnie (ustawienie portrait), czy też horyzontalnie. Kolejną przydatną funkcją jest odtwarzanie predefiniowanej sekwencji wartości. Aktualnie mamy tu dostępną sekwencję potrząśnięcia, lecz być może w przyszłości pojawią się nowe. Efekt zmian w dodatkowym panelu widoczny jest po uruchomieniu naszej aplikacji zgodnie z tym, co widać na rysunku 3.

Rysunek 3. Zmiany w dodatkowym panelu odzwierciedlone na emulatorze.

Emulacja lokalizacji

Drugim istotnym mechanizmem, który doczekał się realizacji w emulatorze, jest usługa lokalizacji. Aby skorzystać z informacji dostarczanych przez odbiornik GPS, należy posłużyć się takim oto kodem:

GeoCoordinateWatcher watcher = new GeoCoordinateWatcher();
watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
watcher.Start();

void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
    this.tbxLat.Dispatcher.BeginInvoke(delegate { this.tbxLat.Text = e.Position.Location.Latitude.ToString("Lat 0.00000"); });
    this.tbxLon.Dispatcher.BeginInvoke(delegate { this.tbxLon.Text = e.Position.Location.Longitude.ToString("Lon 0.00000"); });
}

W tym momencie po uruchomieniu aplikacji na emulatorze mamy możliwość zasymulowania zmian położenia dzięki drugiej zakładce wspomnianego przeze mnie wcześniej panelu dodatkowego. Zakładka ta widoczna jest na rysunku 4.

Rysunek 4. Zakładka do emulacji danych GPS.

Mamy tu możliwość dodawania kolejnych punktów, które będą przekazywane do emulatora. Do dyspozycji więc mamy mapy Bing oraz wygodną interakcję i ich przeszukiwanie, dzięki czemu proces wyznaczania odpowiednich punktów nie jest uciążliwy. Po przygotowaniu takiej sekwencji wystarczy określić częstotliwość wysyłki danych oraz wcisnąć przycisk startu znajdujący się tuż obok pola z czasem. Sekwencja ta może być oczywiście edytowana. Przygotowaną ścieżkę można również zapisać do późniejszego wykorzystania. Wynik uruchomienia przykładowej aplikacji widoczny jest na rysunku 5.

Rysunek 5. Wynik działania emulacji danych GPS.

Podsumowanie

W tym artykule zapoznaliśmy się z nowymi możliwościami oferowanymi przez emulator urządzenia z zainstalowanym systemem Windows Phone 7.1, jakimi są emulacja akcelerometru oraz usługi lokalizacji (GPS). Dzięki nim tworzenie aplikacji, które korzystają z tych dwóch wbudowanych w urządzenie sensorów, będzie dużo łatwiejsze i wygodniejsze niż miało to miejsce do tej pory.