Windows Mobile C# - obsługa GPS
Dodany: 11:39, niedziela, 20 czerwca 2010
Projektowanie aplikacji mobilnych na platformę Windows Mobile w języku C# daje programiście wiele gotowych możliwości. Jedną z nich jest obsługa modułu GPS, dzięki czemu użytkownik może pobierać dane współrzędnych geograficznych za pomocą protokołu NMEA. Zadaniem tego artykułu jest opisanie sposobu implementacji obsługi GPS na platformę Windows Mobile.
W tym programie zostanie wykorzystana gotowa biblioteka do obsługi GPS w technologii .NET - Microsoft.WindowsMobile.Samples.Location.dll, oraz program FakeGPS umożliwiający symulacje działania GPS na emulatorze urządzenia przenośnego w programie Microsoft Visual Studio 2008 Professional.
Pierwsze, co należy zrobić, to wgrać na symulowane urządzenie aplikacje FakeGPS. Najlepiej zrobić to kopiując spakowany plik FakeGPS.cab z folderu Windows Mobile SDK (w moim przypadku: C:\Program Files (x86)\Windows Mobile 6 SDK\Tools\GPS) do folderu symulującym karte pamięci, a następnie uruchomić plik .CAB z poziomu telefonu w celu jego instalacji na urządzeniu. Kolejnym krokiem jest uruchomienie programu FakeGPS. Powinno ukazać się okno, jak na poniższym obrazku.

W celu uruchomienia GPS należy ustawić pierwszy ComboBox na wartość Enable, zaś w drugim wybrać symulowany plik NMEA (w moim przypadku dixies.txt) i zatwierdzić przyciskiem menu - Done. Kolejnym krokiem jest stworzenie nowego projektu Smart Device w Visual Studio. Na interfejs użytkownika będą składały się 2 przyciski typu Button (o nazwach: bStartGPS i bStopGPS), 2 pola typu TextBox (tbLongitude i tbLatitude) oraz tekst w formie Label (w celu podpisania długości i szerokości geograficznej). Całość powinna wyglądać jak na załączonym obrazku (dodane kilka mniej istotnych właściwości).

Dodatkowo właściwość ReadOnly pól typu TextBox powinna być ustawiona na True, w celu zlikwidowania możliwości edycji wyświetlanych danych, oraz przycisk Stop GPS powinień być nieaktywny (właściwość Enabled na False). W tym momencie interfejs użytkownika jest już gotowy i należy dodać tylko niezbędny kod.
Pierwsze, co należy zrobić, to dodanie do projektu referencji do biblioteki obsługującej GPS - Microsoft.WindowsMobile.Samples.Location.dll oraz dodanie przestrzeni nazw do kodu.
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.WindowsMobile.Samples.Location;
Kolejnym krokiem jest dodanie zmiennych globalnych odpowiedzialnych za obsługe GPS, aktualnej pozycji oraz delegata EventHandler, który później będzie wywoływany w celu aktualizacji danych.
{
private EventHandler updateEvent;
private GpsPosition position = null;
...
Następnie w konstruktorze okna głównego należy dodać kod odpowiedzialny za zdarzenie zmiany pozycji GPS oraz przypisać do delegata funkcje, która będzie wywoływana wraz z wywoływaniem delegata.
updateEvent = new EventHandler(update);
gps.LocationChanged += new LocationChangedEventHandler(gps_LocationChanged);
Kod funkcji update i gps_LocationChanged został opisany poniżej.
Invoke(updateEvent);
void update(object sender, System.EventArgs args)
{
{
{
tbLatitude.Text = string.Format("{0}°{1}'{2:0}''", position.LatitudeInDegreesMinutesSeconds.Degrees, position.LatitudeInDegreesMinutesSeconds.Minutes, position.LatitudeInDegreesMinutesSeconds.Seconds);
Zdarzenie odpowiedzialne za zmiane pozycji GPS przypisuje otrzymane dane do zmiennej position a następnie wywołuje zdarzenie aktualizacji danych. Zadaniem update jest sprawdzenie, czy GPS jest aktywny, oraz czy jest ustalona zmienna position, a następnie w odpowiednich TextBox'ach wyświetlane są sformatowane wartości przekazane przez urządzenie GPS (w tym przypadku FakeGPS).
Za włączenie i wyłączenie obsługi urządzenia GPS odpowiedzialne za przyciski Start GPS i Stop GPS. W oknie projektowania aplikacji należy dwukrotnie nacisnąć na oba przyciski, aby Visual automatycznie wygenerował zdarzenia naciśnięcia na nie, a następnie należy dodać poniżej opisany kod uruchamiania i wyłączania GPS.
{
{
bStartGPS.Enabled = false;
bStopGPS.Enabled = true;
private void bStopGPS_Click(object sender, EventArgs e)
{
{
bStartGPS.Enabled = true;
bStopGPS.Enabled = false;
tbLatitude.Text = tbLongitude.Text = " włącz GPS";
Ostatnim elementem, który należy dodać jest wyłączenie GPS podczas zamykania programu. Realizuje to zdarzenie Closed okna głównego aplikacji.
{
{
W ten sposób aplikacja umożliwiająca symulacje odbierania i przetwarzania danych GPS na urządzenie przenośne jest już gotowa. Poniżej znajduje się zrzut ekranu działającej aplikacji. Po więcej informacji zapraszam do działu kontakt.




