Programowanie aplikacji dla urzadzen mobilnych z systemem Windows Mobile promob

background image
background image

Idź do

• Spis treści
• Przykładowy rozdział

• Katalog online

• Dodaj do koszyka

• Zamów cennik

• Zamów informacje

o nowościach

• Fragmenty książek

online

Helion SA

ul. Kościuszki 1c

44-100 Gliwice

tel. 32 230 98 63

e-mail: helion@helion.pl

© Helion 1991–2010

Katalog książek

Twój koszyk

Cennik i informacje

Czytelnia

Kontakt

• Zamów drukowany

katalog

Programowanie aplikacji

dla urz¹dzeñ mobilnych

z systemem Windows Mobile

Autorzy:

Jacek Matulewski

, Bartosz Turowski

ISBN: 978-83-246-2631-1

Format: 158235, stron: 400

Zaprojektuj nowe aplikacje dla urz¹dzeñ mobilnych

• Œrodowisko Visual Studio i szkic projektu

• Wykorzystanie jêzyka C# i platformy .NET Compact

• Zastosowanie grafiki trójwymiarowej z mobilnym Direct3D

Urz¹dzenia przenoœne, pocz¹wszy od telefonów komórkowych, a skoñczywszy na GPS-ach

i kieszonkowych odtwarzaczach wideo, s¹ dziœ niezwykle popularne. Wiele z nich ³¹czy

w sobie tak przeró¿ne funkcje, ¿e mo¿na je nazwaæ minikomputerami. Nic dziwnego, ¿e

pracuj¹ pod kontrol¹ uniwersalnego systemu operacyjnego, zdolnego obs³u¿yæ wiele

ró¿nych aplikacji, który bez k³opotu mo¿na przenieœæ z jednego urz¹dzenia na drugie.

Podobna kompatybilnoœæ samych aplikacji gwarantuje mo¿liwoœæ ich wielokrotnego

wykorzystania w ró¿nych typach urz¹dzeñ, a u¿ytkownikom zapewnia komfort

b³yskawicznego opanowania obs³ugi nowego telefonu czy aparatu fotograficznego.
W ksi¹¿ce „Programowanie aplikacji dla urz¹dzeñ mobilnych i systemu Windows Mobile”

omówione zosta³o projektowanie aplikacji napisanych w jêzyku C# dla urz¹dzeñ

dzia³aj¹cych pod kontrol¹ systemu Windows Mobile. Znajdziesz tu wszystkie aspekty

pracy nad takim programem: pocz¹wszy od warunków œrodowiska programistycznego

i uruchomieniowego, przez pisanie i testowanie kodu (z wyszczególnieniem elementów

w³aœciwych aplikacjom projektowanym dla platformy .NET Compact), a¿ po

przechowywanie danych w plikach XML czy bazie SQL Server Compact. Dowiesz siê

tak¿e nieco wiêcej o wykorzystywaniu w urz¹dzeniach przenoœnych grafiki 3D.

• Œrodowisko programistyczne Visual Studio i emulatory

• Tworzenie, zapisywanie i wczytywanie projektu

• Uruchomienie aplikacji na rzeczywistym urz¹dzeniu

• Jêzyk C# i praktyka projektowania aplikacji dla platformy .NET Compact

• Projektowanie kontrolek i kontrolki charakterystyczne dla platformy .NET Compact

• Studium przypadku – gra Reversi

• Obs³uga podstawowych funkcji telefonu i programu Outlook

• Detekcja stanu urz¹dzenia przenoœnego i dodatkowe funkcje urz¹dzeñ przenoœnych

• Przechowywanie danych w SQL Server Compact i plikach XML

• Grafika trójwymiarowa z mobilnym Direct3D

• Instalacja Windows Mobile 6 Professional SDK

Zagwarantuj uniwersalnoϾ swoich aplikacji Рbuduj je dla systemu Windows Mobile

background image

Spis treci

Wstp .............................................................................................. 9

Rozdzia 1. Przygotowania ................................................................................ 11

rodowisko programistyczne Visual Studio ................................................................... 11
Emulatory ....................................................................................................................... 12
Urzdzenie przenone ..................................................................................................... 15
Remote File Viewer i Remote Registry Editor ............................................................... 15
MyMobiler ...................................................................................................................... 18
Windows Mobile SDK ................................................................................................... 18
Kilka sów o Windows Mobile ....................................................................................... 19

Rozdzia 2. Pierwsze kroki ............................................................................... 21

Tworzenie i zapisywanie projektu .................................................................................. 21
Rzut oka na rodowisko .................................................................................................. 24
Korzystanie z kontrolek do projektowania interfejsu aplikacji ....................................... 26
Zapisywanie i wczytywanie projektu .............................................................................. 27
Analiza kodu aplikacji .................................................................................................... 28
Elastyczno interfejsu aplikacji ..................................................................................... 33
Metody zdarzeniowe ....................................................................................................... 35

Metoda zdarzeniowa reagujca na zmian pozycji suwaka ...................................... 35
Testowanie metody zdarzeniowej ............................................................................ 36
Przypisywanie istniejcej metody do zdarze komponentów ................................... 39
Edycja metody zdarzeniowej .................................................................................... 40
Modyfikowanie wasnoci komponentów ................................................................ 40
Wywoywanie metody zdarzeniowej z poziomu kodu ............................................. 41

Uruchomienie aplikacji na rzeczywistym urzdzeniu ..................................................... 42

Rozdzia 3. Jzyk C# ........................................................................................ 45

Platforma .NET .............................................................................................................. 45

Cele platformy .NET ................................................................................................ 45
rodowisko uruchomieniowe ................................................................................... 46
Kod poredni i podwójna kompilacja ....................................................................... 47
Nowe nazwy i skróty ................................................................................................ 47

Podstawowe typy danych ............................................................................................... 48

Deklaracja i zmiana wartoci zmiennej .................................................................... 48
Typy liczbowe oraz znakowy ................................................................................... 49
Okrelanie typu zmiennej przy inicjacji (typ var) ..................................................... 51
Operatory ................................................................................................................. 51

background image

4

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

Konwersje typów podstawowych ............................................................................. 53
Operatory is i as ....................................................................................................... 54
acuchy .................................................................................................................. 55
Typ wyliczeniowy .................................................................................................... 58
Delegacje i zdarzenia ................................................................................................ 59
Wyraenia lambda .................................................................................................... 60

Typy wartociowe i referencyjne .................................................................................... 62

Nullable .................................................................................................................... 63
Pudekowanie ........................................................................................................... 64

Sterowanie przepywem ................................................................................................. 64

Instrukcja warunkowa if..else ................................................................................... 64
Instrukcja wyboru switch ......................................................................................... 65
Ptle .......................................................................................................................... 66

Zwracanie wartoci przez argument metody .................................................................. 67
Wyjtki ........................................................................................................................... 68
Dyrektywy preprocesora ................................................................................................. 71

Kompilacja warunkowa — ostrzeenia .................................................................... 71
Definiowanie staych preprocesora .......................................................................... 72
Bloki ......................................................................................................................... 73

Atrybuty ......................................................................................................................... 73
Kolekcje ......................................................................................................................... 74

„Zwyke” tablice ...................................................................................................... 74
Ptla foreach ............................................................................................................. 76
Sortowanie ............................................................................................................... 78
Kolekcja List ............................................................................................................ 79
Kolekcja SortedList i inne ........................................................................................ 81
Tablice jako argumenty funkcji oraz metody z nieokrelon liczb argumentów .... 81

Projektowanie typów ...................................................................................................... 82

Przykad struktury (Ulamek) .................................................................................... 83
Nowa forma inicjacji obiektów i tablic .................................................................... 92
Implementacja interfejsu (na przykadzie IComparable) .......................................... 92
Definiowanie typów parametrycznych ..................................................................... 94
Rozszerzenia .......................................................................................................... 101
Typy anonimowe .................................................................................................... 102

Zapytania LINQ na przykadzie kolekcji ...................................................................... 103

Pobieranie danych (filtrowanie i sortowanie) ......................................................... 106
Najprostsza prezentacja pobranych danych ............................................................ 106
Kalkulacje .............................................................................................................. 106
Wybór elementu ..................................................................................................... 107
Testowanie danych ................................................................................................. 107
Prezentacja w grupach ............................................................................................ 107
czenie zbiorów danych ....................................................................................... 108
czenie danych z rónych róde w zapytaniu LINQ — operator join ................. 109
Moliwo modyfikacji danych róda ................................................................... 109

Rozdzia 4. Praktyka projektowania aplikacji dla platformy .NET Compact ....... 111

Rysowanie na ekranie ................................................................................................... 112

Obsuga rysika ........................................................................................................ 113
Menu ...................................................................................................................... 115
Zmiana orientacji ekranu ........................................................................................ 118
Zamykanie i minimalizowanie aplikacji ................................................................. 118
Reakcja aplikacji na prób zamknicia okna .......................................................... 119
Okno dialogowe wyboru pliku ............................................................................... 121

background image

Spis treci

5

Notatnik ........................................................................................................................ 124

Projektowanie interfejsu aplikacji .......................................................................... 124
Menu ...................................................................................................................... 125
Edycja ..................................................................................................................... 127
Menu kontekstowe ................................................................................................. 130
Okna dialogowe i pliki tekstowe ............................................................................ 131
Zamykanie aplikacji ............................................................................................... 136
Opcje widoku ......................................................................................................... 138

Drzewo katalogów ........................................................................................................ 138

Rozdzia 5. Projektowanie kontrolek ............................................................... 147

Projekt kontrolki i budowa interfejsu ........................................................................... 147
Wasnoci ..................................................................................................................... 150
Aplikacja testujca ........................................................................................................ 150
Zdarzenia ...................................................................................................................... 152
Dodanie kontrolki do podokna Toolbox ....................................................................... 154

Rozdzia 6. Studium przypadku — gra Reversi ................................................ 157

Tworzenie rodowiska do testowania klasy .................................................................. 158
Pola, metody i wasnoci. Zakres dostpnoci .............................................................. 160
Konstruktor klasy ......................................................................................................... 162
Interfejs aplikacji testujcej .......................................................................................... 162
Implementacja zasad gry .............................................................................................. 165
Metody zdarzeniowe ..................................................................................................... 169
Elastyczny interfejs ...................................................................................................... 172
Korzystanie z zasobów ................................................................................................. 183
Wykrywanie szczególnych sytuacji w grze .................................................................. 183

Metoda sprawdzajca, czy gracz moe wykona ruch ........................................... 186
Warunki zakoczenia gry i wyonienie zwycizcy ................................................. 187

Indeksatory ................................................................................................................... 190
Menu ............................................................................................................................. 191
Dziedziczenie ............................................................................................................... 193
Jak nauczy komputer gra w gr Reversi? .................................................................. 194

Metoda proponujca najlepszy ruch ....................................................................... 195
Podpowied i ruch wykonywany przez komputer .................................................. 197
Gra z komputerem .................................................................................................. 199
Opónienie ruchu komputera ................................................................................. 200
Uzupenienie menu ................................................................................................. 201

Co dalej? ....................................................................................................................... 202

Rozdzia 7. Kontrolki charakterystyczne dla platformy .NET Compact .............. 203

InputPanel ..................................................................................................................... 203
Notification ................................................................................................................... 205
HardwareButton ........................................................................................................... 208

Rozdzia 8. Obsuga podstawowych funkcji telefonu i programu Outlook .......... 211

Cellular Emulator ......................................................................................................... 211

Podczanie emulatora urzdzenia przenonego do programu Cellular Emulator .. 212

Kontakty Outlook ......................................................................................................... 213

Tworzenie aplikacji wywietlajcej list kontaktów .............................................. 214
Tworzenie przykadowych kontaktów .................................................................... 215
Edycja nowego kontaktu ........................................................................................ 216

Inicjowanie pocze telefonicznych ............................................................................ 218
Wysyanie krótkich wiadomoci tekstowych (SMS) .................................................... 220

Przygotowanie projektu aplikacji sucej do wysyania wiadomoci SMS ........... 221

background image

6

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

Wybór adresata i wysanie wiadomoci SMS ......................................................... 222
Numer telefonu w parametrach uruchomienia aplikacji ......................................... 224
Korzystanie z aplikacji wysyajcej SMS-y jak z okna dialogowego ..................... 226

Wysyanie poczty elektronicznej .................................................................................. 228

Metoda wybierajca adres e-mail z listy kontaktów ............................................... 228
Wybór zacznika, komponowanie i wysyanie listu e-mail ................................... 229
Korzystanie z aplikacji wysyajcej listy jak z okna dialogowego ......................... 232

Przechwytywanie wiadomoci SMS ............................................................................. 234

Tworzenie aplikacji przechwytujcej wiadomoci ................................................. 234
Trwae monitorowanie wiadomoci ....................................................................... 237

Kalendarz i zadania ...................................................................................................... 239

Lista zada i terminów zapisanych w kalendarzu ................................................... 239
Dodawanie nowych terminów i zada .................................................................... 240

Rozdzia 9. Detekcja stanu urzdzenia przenonego ........................................ 243

Wykrywanie dodatkowych urzdze ............................................................................ 243
Bateria .......................................................................................................................... 247
Reakcja na zmian stanu urzdzenia ............................................................................. 248
Reakcja z uruchomieniem aplikacji .............................................................................. 250
Stan telefonu i poczenia przychodzce ...................................................................... 256

Rozdzia 10. Dodatkowe funkcje urzdze przenonych ..................................... 261

Aparat fotograficzny i kamera ...................................................................................... 261

Obsuga wbudowanego aparatu fotograficznego .................................................... 262
Wybór obrazu za pomoc okna dialogowego SelectPictureDialog ........................ 265
Film ........................................................................................................................ 266

GPS ............................................................................................................................... 267

Przygotowanie biblioteki ........................................................................................ 267
Wywietlanie informacji z moduu GPS ................................................................ 268
Instalacja i uruchomienie aplikacji FakeGPS

na emulatorze urzdzenia przenonego ............................................................... 270

Akcelerometr ................................................................................................................ 273

Rozdzia 11. Przechowywanie danych w SQL Server Compact ............................ 277

Minimum wiedzy o SQL .............................................................................................. 277

Select ...................................................................................................................... 278
Insert ...................................................................................................................... 278
Delete ..................................................................................................................... 279
Update .................................................................................................................... 279

ADO.NET ..................................................................................................................... 279

Projekt aplikacji z doczon baz danych ............................................................. 279
Konfiguracja komponentu DataSet ........................................................................ 281
Podgld danych udostpnianych przez komponent DataSet ................................... 285
Prezentacja danych w siatce DataGridView ........................................................... 285
Projektowanie formularzy prezentujcych pojedyncze rekordy ............................. 287
Sortowanie ............................................................................................................. 289
Filtrowanie ............................................................................................................. 290
Odczytywanie z poziomu kodu wartoci przechowywanych w komórkach ........... 290
Aktualizacja zmodyfikowanych danych ................................................................. 291

LINQ to DataSet ........................................................................................................... 294

Zapytanie ................................................................................................................ 294
Korzystanie z rozszerze LINQ ............................................................................. 295
Dowolno sortowania i filtrowania pobieranych danych ...................................... 295

background image

Spis treci

7

Rozdzia 12. Przechowywanie danych w plikach XML (LINQ to XML) ................. 297

Tworzenie pliku XML za pomoc klas XDocument i XElement ................................. 298
Pobieranie wartoci z elementów o znanej pozycji w drzewie ..................................... 301
Przenoszenie danych z kolekcji do pliku XML ............................................................ 303
Przenoszenie danych z bazy danych (komponentu DataSet) do pliku XML ................ 304
Tabele w plikach XML. Zapytania LINQ ..................................................................... 306
Modyfikacja pliku XML ............................................................................................... 307
Serializacja obiektów do pliku XML ............................................................................ 308

Serializacja obiektu do pliku XML ........................................................................ 308
Deserializacja obiektu z pliku XML ....................................................................... 310

Rozdzia 13. Grafika trójwymiarowa z mobilnym Direct3D .................................. 311

Szablon projektu aplikacji korzystajcej z Direct3D .................................................... 312
Rysowanie trójkta ....................................................................................................... 314
Trzy macierze ............................................................................................................... 317

Kamera i perspektywa ............................................................................................ 317
Poruszanie trójktem za pomoc rysika ................................................................. 320
Obracanie trójkta .................................................................................................. 323

Zmiana orientacji ekranu .............................................................................................. 325
Dygresja: sprzenie kamery z akcelerometrem ........................................................... 326
Szecian ........................................................................................................................ 328
Teksturowanie .............................................................................................................. 331
Owietlenie ................................................................................................................... 335

Rozdzia 14. Internet w aplikacjach mobilnych .................................................. 341

Poczenie z internetem ................................................................................................ 341

Podczanie emulatora urzdzenia przenonego do internetu ................................. 342

Internetowy tumacz ..................................................................................................... 344
Korzystanie z usug sieciowych (web services) ............................................................ 348

Sposób pierwszy ..................................................................................................... 349
Sposób drugi ........................................................................................................... 351

Tworzenie wasnej usugi sieciowej ............................................................................. 353
FakeServer, czyli prawie serwer ................................................................................... 358

Dodatek A

Instalacja Windows Mobile 6 Professional SDK ............................. 361

Dodatek B

Przygotowywanie pakietów instalacyjnych aplikacji ....................... 365

Tworzenie projektu instalatora ..................................................................................... 365
Wybór plików ............................................................................................................... 367
Katalogi specjalne. Tworzenie skrótów ........................................................................ 368
Plik CAB ...................................................................................................................... 369
Instalacja ....................................................................................................................... 369
Instalatory platformy .NET i bazy danych SQL Server Compact ................................. 372

Skorowidz .................................................................................... 373

background image

Rozdzia 8.

Obsuga podstawowych
funkcji telefonu
i programu Outlook

W tym rozdziale opisz, jak z poziomu aplikacji mona uywa funkcji urzdzenia prze-
nonego charakterystycznych dla telefonu komórkowego. Za ich obsug odpowiadaj
klasy doczane do platformy .NET Compact, których nie znajdziemy w jej penej wersji

1

.

Jednak zanim do tego przejdziemy, poczymy emulator urzdzenia przenonego z pro-
gramem Cellular Emulator imitujcym fikcyjn sie komórkow. To umoliwi darmowe
testowanie projektowanych aplikacji.

Cellular Emulator

Program Cellular Emulator dostarczany jest razem z Windows Mobile 6 SDK (zob.
dodatek A). Jest to emulator sieci komórkowej wspópracujcy z emulatorami urzdze
przenonych dostpnych w Visual Studio. Pozwala na inicjowanie pocze z emula-
torem telefonu oraz ledzenie pocze wychodzcych. Za jego pomoc mona równie
wysya na emulowane urzdzenie wiadomoci SMS (ang. Short Message Service),
jak i odbiera wiadomoci wysane z emulatora. Moemy te zmienia i nadzorowa
parametry sieci oraz komendy AT (polecenia sterujce pozwalajce na komunikacj
midzy komputerem i modemem lub, jak w tym przypadku, midzy urzdzeniem prze-
nonym i sieci komórkow). Jednym sowem, Cellular Emulator tworzy wirtualne
rodowisko sieci komórkowej wokó emulowanego urzdzenia.

1

Oznacza to m.in., e w przeciwiestwie do projektów opisywanych w rozdziaach 2. – 6. aplikacji
korzystajcych z tych specyficznych klas w ogóle nie bdziemy mogli uruchomi na komputerze PC.

background image

212

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

Podczanie emulatora urzdzenia przenonego
do programu Cellular Emulator

1.

Otwieramy program Cellular Emulator (dostpny z menu Start/Wszystkie
programy/Windows Mobile 6 SDK/Tools/
) i odczytujemy nazw portu
szeregowego w lewym dolnym rogu okna programu (np. COM4, por.
rysunek 8.1).

Rysunek 8.1.
czenie emulatora
urzdzenia
z programem
Cellular Emulator

2.

Mapujemy ten port w emulatorze. W tym celu:

a)

Uruchamiamy Visual Studio, a nastpnie z menu Tools wybieramy polecenie
Connect to Device…. Pojawi si okno dialogowe, w którym wskazujemy

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

213

emulator urzdzenia przenonego o nazwie Windows Mobile 6 Professional
Emulator
(wersje Classic nie cz si z sieci komórkow). Klikamy przycisk
Connect.

b)

Po uruchomieniu emulatora z jego menu File wybieramy polecenie
Configure…, a nastpnie na zakadce Peripherals w polu Serial port 0
wpisujemy nazw portu szeregowego odczytanego z programu Cellular
Emulator (np. COM4, rysunek 8.1) i klikamy OK.

c)

Pojawi si komunikat o czeniu z nowym urzdzeniem, ale dopiero
ponowne uruchomienie systemu Windows na emulatorze spowoduje
zalogowanie do fikcyjnej sieci komórkowej. Moemy to wymusi, wybierajc
z menu File emulatora polecenie Reset/Soft.

Po restarcie systemu emulator urzdzenia przenonego powinien si zalogowa do
emulowanej sieci, co sygnalizuje ikona widoczna na pasku tytuu w emulowanym urz-
dzeniu (rysunek 8.2). Jeli zamykajc program emulatora urzdzenia, zapiszemy jego
stan, to ustawienia portu szeregowego zostan równie zapisane, co oszczdzi nam
pracy przy kolejnym uruchomieniu. Przed ponownym wczeniem emulatora naley
oczywicie pamita o uruchomieniu programu Cellular Emulator.

Rysunek 8.2.
Emulator „widzi”
sie komórkow

Kontakty Outlook

W kadym telefonie mamy dostp do zbioru kontaktów. W najprostszym przypadku
ograniczaj si one tylko do nazwy i numeru telefonu. W systemach Windows Mobile
s one jednak znacznie bardziej rozbudowane; za ich obsug odpowiedzialna jest

background image

214

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

mobilna wersja programu Outlook. Moliwy jest dostp do kontaktów — zarówno
odczyt, jak i edycja — z poziomu platformy .NET Compact. Pozwalaj na to klasy
z przestrzeni nazw

Microsoft.WindowsMobile.PocketOutlook

.

Tworzenie aplikacji wywietlajcej list kontaktów

Zacznijmy od stworzenia aplikacji typu Smart Device wywietlajcej wszystkie pola
w ksice kontaktów:

1.

W rodowisku Visual Studio tworzymy nowy projekt aplikacji dla urzdzenia
przenonego na platform Windows Mobile 6 Professional i .NET Compact
Framework Version 3.5. Projekt ów nazwijmy Kontakty.

2.

Z podokna Toolbox wybieramy siatk

DataGrid

, umieszczamy j na formie,

a nastpnie, korzystajc z podokna Properties, ustawiamy jej wasno

Dock

na warto

Fill

.

3.

Doczmy do projektu referencj do biblioteki DLL zawierajcej klasy
pozwalajce na korzystanie z moliwoci programu Outlook na urzdzeniu
przenonym. W tym celu w menu Project wybieramy Add Reference…,
a nastpnie na zakadce .NET wybieramy bibliotek
Microsoft.WindowsMobile.PocketOutlook i klikamy OK.

4.

Przechodzimy do edycji kodu (klawisz F7) i do zbioru deklaracji przestrzeni
nazw na pocztku pliku Form1.cs dodajemy:

using Microsoft.WindowsMobile.PocketOutlook;

5.

W klasie formy

Form1

definiujemy nowe pole reprezentujce sesj programu

Outlook:

OutlookSession outlook = new OutlookSession();

6.

Natomiast do konstruktora klasy

Form1

dodajemy instrukcj wskazujc kolekcj

kontaktów dostpn w sesji programu Outlook jako ródo danych dla siatki

dataGrid1

:

dataGrid1.DataSource = outlook.Contacts.Items;

7.

Na pasku narzdzi Device z rozwijanej listy Target Device wybieramy Windows
Mobile 6 Professional Emulator
(emulator) lub Windows Mobile 6 Device
(rzeczywiste urzdzenie) i uruchamiamy aplikacj, naciskajc F5.

W punkcie 3. dodalimy referencj do biblioteki PocketOutlook, która jest odpowie-
dzialna za obsug programu Outlook dla urzdze mobilnych, a tym samym za list
kontaktów, kalendarz, zapisywanie i wywietlanie zada, wysyanie i odbieranie wia-
domoci SMS i poczt elektroniczn, a zatem za wikszo funkcji inteligentnego tele-
fonu. W tym rozdziale bdziemy z tej biblioteki korzysta bardzo czsto. Wikszo
potrzebnych funkcjonalnoci zapewnia obiekt zdefiniowany w punkcie 5., tj. instancja
klasy OutlookSession, reprezentujca uruchomion instancj aplikacji Outlook Mobile.
Lista kontaktów dostpna jest poprzez pole

Contacts

tego obiektu, którego kolekcj

Items

wskazalimy jako ródo danych dla siatki

dataGrid1

pokazywanej w oknie pro-

jektowanej aplikacji.

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

215

Po uruchomieniu aplikacji na doczonym rzeczywistym urzdzeniu przenonym powin-
nimy zobaczy tabel zawierajc wszystkie zdefiniowane w nim kontakty programu
Outlook

2

(rysunek 8.3). Jednak jeli korzystamy z emulatora, to najpewniej ksika

kontaktów jest pusta. Moemy oczywicie wypeni j sami kilkoma kontaktami, ale
moemy to równie zrobi z poziomu aplikacji. Tym wanie zajmiemy si w kolejnym
zadaniu.

Rysunek 8.3.
Lista kontaktów
(w emulatorze jest
oczywicie pusta)

Tworzenie przykadowych kontaktów

Utwórzmy w menu pozycj odpowiedzialn za dodanie do ksiki kilku przykadowych
kontaktów:

1.

Otwórzmy menu Outlook, a w nim pozycj Dodaj przykadowe kontakty
(

menuItem2

).

2.

Klikajc dwukrotnie now pozycj w podgldzie formy, stworzymy domyln
metod zdarzeniow zwizan ze zdarzeniem

Click

tej pozycji. Umieszczamy

w niej kod widoczny na listingu 8.1.

Listing 8.1.

Dodawanie przykadowych kontaktów

private void menuItem2_Click(object sender, EventArgs e)
{
Contact kontakt = outlook.Contacts.Items.AddNew();
kontakt.FirstName = "Jan";

2

Inn spraw jest odczytanie kontaktów zapisanych na karcie SIM. Jest to moliwe, cho Windows Mobile
preferuje ich przechowywanie w bazie programu Outlook. Zadanie to uatwiby projekt Smart Device
Framework (SDF) firmy OpenNETCF dostpny na stronie http://www.opennetcf.com/Products/
SmartDeviceFramework/tabid/65/Default.aspx
.

background image

216

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

kontakt.LastName = "Kowalski";
kontakt.MobileTelephoneNumber = "7272024";
kontakt.Email1Address = "jankow@afero.pl";
kontakt.BusinessTelephoneNumber = "7272020";
kontakt.Update();

kontakt = outlook.Contacts.Items.AddNew();
kontakt.FirstName = "Bartosz";
kontakt.LastName = "Turowski";
kontakt.Email1Address = "tubartek@gmail.com";
kontakt.BusinessTelephoneNumber = "7272022";
kontakt.Update();

kontakt = outlook.Contacts.Items.AddNew();
kontakt.FirstName = "Jacek";
kontakt.LastName = "Matulewski";
kontakt.Email1Address = "jacek@fizyka.umk.pl";
kontakt.MobileTelephoneNumber = "7272021";
kontakt.Update();

dataGrid1.Refresh();
}

Numery telefonów uyte w powyszym przykadzie nie s przypadkowe — rozpo-
znawane s przez emulator sieci komórkowej. Przypisane s do nich róne reakcje
programu Cellular Emulator (zob. pole Preset Number na rysunku 8.1, lewy).

Nastpnie uruchamiamy aplikacj i z menu Outlook wybieramy polecenie, które do listy
kontaktów powinno doda trzy nowe pozycje. Moemy to sprawdzi, korzystajc z wbu-
dowanego w Windows Mobile programu do obsugi kontaktów (rysunek 8.4, lewy) lub
z naszej aplikacji (rysunek 8.4, prawy).

Metoda z listingu 8.1 dodaje do zbioru kontaktów trzy nowe. W kadym z tych kon-
taktów wypeniamy tylko kilka z wielu dostpnych pól: imi, nazwisko, numer telefonu
komórkowego i adres e-mail. Te pola wykorzystamy w trakcie dalszej pracy nad pro-
jektem.

Proponuj zapisa stan emulatora po dodaniu przykadowych kontaktów — przy-
dadz si nam podczas kolejnych wicze.

Edycja nowego kontaktu

Platforma .NET Compact nie ma specjalnego okna dialogowego pozwalajcego na
tworzenie nowych kontaktów z wpisywanymi przez uytkownika danymi. Z poziomu
kodu moemy jednak utworzy pusty kontakt, a nastpnie edytowa go, wywoujc
na rzecz reprezentujcego go obiektu metod

ShowDialog

. Spowoduje to wywietlenie

okna z podsumowaniem kontaktu, które w przypadku pustego kontaktu zawiera jedynie

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

217

Rysunek 8.4.
Nowe kontakty

Rysunek 8.5.
Dodanie i edycja
nowego kontaktu

pozycj <Unnamed> (rysunek 8.5, lewy). Kliknicie tej pozycji lub polecenia Edit
w menu spowoduje przywoanie edytora kontaktu widocznego na rysunku 8.5, prawy.
Stwórzmy zatem w menu pozycj, której wybranie spowoduje wywoanie okna pozwa-
lajcego, cho w nie najbardziej elegancki sposób, na dodanie nowego kontaktu o para-
metrach ustalanych przez uytkownika. Myl jednak, e wasny formularz i kod podobny
do tego z listingu 8.1 w profesjonalnych zastosowaniach s lepszym rozwizaniem.

background image

218

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

1.

Do menu Outlook dodaj pozycj Dodaj nowy kontakt (

menuItem3

).

2.

Tworzymy domyln metod zdarzeniow do nowej pozycji menu i umieszczamy
w niej kod widoczny na listingu 8.2.

Listing 8.2.

Dodanie dowolnego kontaktu

private void menuItem3_Click(object sender, EventArgs e)
{
Contact kontakt = new Contact();
string orgFileAs = kontakt.FileAs;
kontakt.ShowDialog();
if (kontakt.FileAs != orgFileAs)
outlook.Contacts.Items.Add(kontakt);
}

Zgodnie z zapowiedzi w powyszej metodzie tworzymy nowy, „pusty” kontakt (instan-
cja klasy

Contact

), a nastpnie wywoujemy na jej rzecz metod

ShowDialog

, co powo-

duje wywietlenie okna widocznego na rysunku 8.5, po lewej. Jeli uytkownik zmieni
nazw kontaktu, zmieni si te zawarto pola edycyjnego Zapisz jako w oknie dialo-
gowym (odpowiada mu pole

FileAs

obiektu

kontakt

). Jest ono domylnie tworzone

na podstawie imienia i nazwiska dopisywanej osoby, czyli pól

FirstName

i

LastName

obiektu reprezentujcego kontakt. W edytorze kontaktu prezentowane s one razem
w jednym polu o nazwie Name.

Z poziomu kodu moliwe jest równie wywoanie okna dialogowego pozwalajcego
na wyszukanie kontaktu w ksice kontaktów. Z tej moliwoci skorzystamy w dalszej
czci rozdziau, podczas opisywania funkcji zwizanych z wysyaniem SMS-ów
i e-maili.

Inicjowanie pocze telefonicznych

Aby zadzwoni na wybrany numer telefonu, wystarczy tylko jedna linia kodu! Dodajmy
zatem do aplikacji przygotowanej w poprzednim wiczeniu metod, która zainicjuje
poczenie po dwukrotnym klikniciu wybranego kontaktu.

Za funkcje zwizane stricte z telefonem komórkowym odpowiadaj klasy z przestrzeni
nazw Microsoft.WindowsMobile.Telephony, w szczególnoci klasa

Phone

. Podobnie jak

klasy pozwalajce na obsug programu Outlook Mobile, take te klasy zdefiniowane
s w bibliotece DLL, któr trzeba doda do projektu.

1.

W menu Project wybieramy Add Reference…. Gdy pojawi si okno Add
Reference
, przechodzimy na zakadk .NET, zaznaczamy bibliotek
Microsoft.WindowsMobile.Telephony i klikamy przycisk OK.

2.

Do zbioru deklaracji przestrzeni nazw na pocztku pliku Form1.cs dodajemy:

using Microsoft.WindowsMobile.Telephony;

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

219

3.

W gównym menu okna, z prawej strony, umieszczamy podmenu o nazwie
Telefon. W nim dodajemy polecenie Pocz (

menuItem5

).

4.

Tworzymy domyln metod zdarzeniow zwizan ze zdarzeniem

Click

elementu Pocz i uzupeniamy j zgodnie z listingiem 8.3.

Listing 8.3.

Inicjacja poczenia telefonicznego

private void menuItem5_Click(object sender, EventArgs e)
{
new Phone().Talk(
outlook.Contacts.Items[dataGrid1.CurrentCell.RowNumber].

´MobileTelephoneNumber);

}

5.

Metod t moemy równie zwiza ze zdarzeniem dwukrotnego kliknicia
siatki.

Argumentem metody

Phone.Talk

jest numer telefonu, z którym chcemy si poczy,

zapisany w acuchu (typ

string

). Efekt jej wywoania widoczny jest na rysunku 8.6.

Jeeli w argumencie przelemy pusty cig znaków (np. gdy kontakt nie mia przypi-
sanego telefonu komórkowego), poczenie nie zostanie zainicjowane i nie zostanie
wywietlony aden komunikat o bdzie. Oczywicie metoda moe uwzgldnia tak
sytuacj, kiedy próbujemy wykona poczenie z innymi telefonami, których numery
zapisane s w danych kontaktu. Listing 8.4 prezentuje kod, w którym w przypadku
braku telefonu komórkowego inicjowane jest poczenie z telefonem subowym,
a dopiero gdy i tego nie ma, wywietlany jest komunikat o bdzie.

Rysunek 8.6.
Wybieranie numeru
po dwukrotnym
klikniciu pozycji
w licie kontaktów

background image

220

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

Listing 8.4.

Jeeli kontakt nie ma telefonu komórkowego, program sprawdzi, czy nie ma zapisanych

innych numerów

private void menuItem5_Click(object sender, EventArgs e)
{
Contact kontakt=outlook.Contacts.Items[dataGrid1.CurrentCell.RowNumber];
string numerTelefonu = kontakt.MobileTelephoneNumber;
if (numerTelefonu == "") numerTelefonu = kontakt.BusinessTelephoneNumber;
if (numerTelefonu != "") new Phone().Talk(numerTelefonu);
else MessageBox.Show("Wybrany kontakt nie zawiera numeru telefonu komórkowego

´ani subowego");

}

Jeeli korzystamy z emulatora, próba inicjowania poczenia telefonicznego, jak i sama
rozmowa s ledzone przez emulator sieci komórkowej. Lista aktualnych pocze
widoczna jest w polu Active Calls okna Cellular Emulator (rysunek 8.7). Wybrane
poczenie moemy przerwa, klikajc przycisk Drop Call.

Rysunek 8.7.
Aktywne poczenie
wychodzce

Wysyanie krótkich
wiadomoci tekstowych (SMS)

Przygotujmy kolejn aplikacj, za pomoc której bdziemy mogli tworzy i wysya
wiadomoci SMS. S to krótkie wiadomoci tekstowe (do 160 znaków) przesyane w sie-
ciach komórkowych i odczytywane przez wszystkie wspóczenie produkowane tele-
fony komórkowe.

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

221

Przygotowanie projektu aplikacji sucej
do wysyania wiadomoci SMS

1.

Do rozwizania Kontakty dodajmy nowy projekt typu Device Application
dla systemu Windows Mobile 6 Professional, korzystajcy z platformy .NET
Compact Framework Version 3.5. Nazwijmy go SMS.

2.

W menu Project wybieramy Add Reference…, po czym na zakadce .NET
otwartego okna wskazujemy bibliotek Microsoft.WindowsMobile.PocketOutlook
i klikamy OK. W taki sam sposób dodajemy równie bibliotek
Microsoft.WindowsMobile.Forms.

3.

Nowy projekt ustawiamy jako projekt startowy rozwizania (menu Set as StartUp
Project
).

4.

Do zbioru deklaracji przestrzeni nazw na pocztku pliku Form1.cs dodajemy:

using Microsoft.WindowsMobile.PocketOutlook;
using Microsoft.WindowsMobile.Forms;

5.

W widoku projektowania (zakadka Form1.cs [Design]) w palecie komponentów
(podokno Toolbox) odnajdujemy pole edycyjne (

TextBox

) i umieszczamy

na formie dwa takie komponenty — zgodnie ze wzorem na rysunku 8.8.
Zmiemy ich nazwy (pole Name w podoknie wasnoci) na, odpowiednio,

adresatTextBox

oraz

tekstTextBox

.

Rysunek 8.8.
Projekt interfejsu

6.

Nastpnie w podoknie Properties ustawiamy wasnoci komponentu

adresatTextBox

: wasno

Enabled

ustawiamy na

False

,

ReadOnly

na

true

,

a zakotwiczenie (wasno

Anchor

) na

Top,Left,Right

, co spowoduje zachowanie

staej odlegoci pola edycyjnego od górnej i bocznych krawdzi formy take
podczas zmiany orientacji ekranu.

background image

222

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

7.

W przypadku komponentu

tekstTextBox

ustawiamy: wasno

Multiline

na

True

,

ScrollBars

na

Both

oraz zakotwiczenie

Anchor

na

Top,Bottom,Left,Right

,

a nastpnie rozcigamy go na dostpnej powierzchni formy pod pierwszym
polem edycyjnym (por. rysunek 8.8).

8.

W podoknie Toolbox odnajdujemy komponent przycisku

Button

i umieszczamy

go na formie. Zmieniamy jego nazw na

kontaktyButton

. W podoknie Properties

w polu odpowiadajcym treci etykiety (wasno

Text

) wpisujemy trzy kropki.

Zakotwiczenie ustawiamy na

Top,Right

. W ten sposób komponent umieszczamy

na górze formy, po prawej stronie komponentu

adresatTextBox

.

9.

Na formie umieszczamy jeszcze dwa komponenty

Label

i zmieniamy

ich wasno

Text

na „Do:” oraz „Wiadomo:”. Ich pooenie zmieniamy

zgodnie ze wzorem z rysunku 8.8.

10.

Nastpnie tworzymy menu zgodnie ze wzorem widocznym na rysunku 8.8.
Zmieniamy nazwy elementów menu odpowiednio na:

wyslijMenuItem

,

opcjeMenuItem

,

potwierdzenieodbioruMenuItem

,

zakonczMenuItem

. Wasno

Enabled

pozycji Wylij (

wyslijMenuItem

) ustawiamy na

false

.

Aplikacja bdzie dziaaa w ten sposób, e za pomoc przycisku

kontaktyButton

wywo-

amy okno dialogowe wyboru kontaktu. Po wskazaniu kontaktu jego nazw i numer
telefonu wywietlimy w polu edycyjnym

adresatTextBox

. Z kolei pole edycyjne

wiadomoscTextBox

pozwoli na wpisanie treci wiadomoci, któr mona bdzie nastp-

nie wysa, klikajc pozycj menu z etykiet Wylij. Bdziemy mie take moliwo
zadania potwierdzenia odbioru wiadomoci, zaznaczajc odpowiedni opcj w menu.

Wybór adresata i wysanie wiadomoci SMS

Stwórzmy teraz metody realizujce funkcje poszczególnych pozycji menu:

1.

W klasie formy

Form1

definiujemy pole:

string numerTelefonuAdresata;

2.

Tworzymy metod zdarzeniow zwizan ze zdarzeniem

Click

komponentu

kontaktyButton

, w której umieszczamy instrukcje z listingu 8.5.

Listing 8.5.

Wybór adresata wiadomoci w ksice kontaktów

private void kontaktyButton_Click(object sender, EventArgs e)
{
ChooseContactDialog wybierzKontakt = new ChooseContactDialog();
wybierzKontakt.RequiredProperties = new ContactProperty[]
{ContactProperty.Sms};
wybierzKontakt.Title = "Wybierz adresata";
if (wybierzKontakt.ShowDialog() == DialogResult.OK)
{
numerTelefonuAdresata = wybierzKontakt.SelectedPropertyValue;
adresatTextBox.Text = wybierzKontakt.SelectedContactName
+ " <" + numerTelefonuAdresata + ">";

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

223

wyslijMenuItem.Enabled = true;
}
}

3.

Nastpnie tworzymy metod zwizan ze zdarzeniem

Click

pozycji menu

Wylij i uzupeniamy jej kod zgodnie z listingiem 8.6.

Listing 8.6.

Wysyanie wiadomoci SMS

private void wyslijMenuItem_Click(object sender, EventArgs e)
{
SmsMessage sms = new SmsMessage(numerTelefonuAdresata, tekstTextBox.Text);
sms.RequestDeliveryReport = potwierdzenieOdbioruMenuItem.Checked;
try
{
sms.Send();
MessageBox.Show("Wiadomo zostaa wysana!");
}
catch
{
MessageBox.Show("Nie udao si wysa wiadomoci!");
return;
}
}

4.

Jako ostatnie tworzymy dwie metody zwizane ze zdarzeniami

Click

pozycji

menu Potwierdzenie odbioru oraz Zakocz. Ich zawarto uzupeniamy zgodnie
ze wzorem na listingu 8.7.

Listing 8.7.

Zmiana opcji potwierdzenia odbioru oraz zakoczenie programu

private void potwierdzenieOdbioruMenuItem_Click(object sender, EventArgs e)
{
potwierdzenieOdbioruMenuItem.Checked = !potwierdzenieOdbioruMenuItem.Checked;
}

private void zakonczMenuItem_Click(object sender, EventArgs e)
{
Close();
}

Pierwsza linia kodu zaprezentowanego w punkcie 2. (listing 8.5) tworzy okno dialo-
gowe typu

ChooseContactDialog

pozwalajce na wybór kontaktu z listy kontaktów

zapisanych w urzdzeniu przenonym. Okno to pochodzi z przestrzeni nazw

Microsoft.

´

WindowsMobile.Forms

, któr naley doda do sekcji instrukcji

using

. Wywietlamy

przy tym tylko te kontakty, które umoliwiaj wysyanie wiadomoci SMS. Nastpnie
ustalamy tytu okna dialogowego i je przywoujemy, wywoujc metod

ShowDialog

.

Jeli, korzystajc z okna dialogowego, uytkownik wybra adresata, wywietlamy jego
dane w polu edycyjnym

adresatTextBox

i odblokowujemy opcj Wylij.

W punkcie 3. przygotowalimy metod wysyajc SMS. Jak wida na listingu 8.6,
tworzymy w tym celu obiekt typu

SmsMessage

(naley do przestrzeni

Microsoft.Windows

background image

224

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

´

Mobile.PocketOutlook

), przekazujc do argumentów konstruktora numer wybranego

wczeniej adresata wiadomoci (przechowywany w zmiennej

numerTelefonuAdresata

)

oraz wpisan do pola tekstowego

tekstTekstBox

tre wiadomoci. Zwrómy uwag

na drug lini ciaa metody, w której w zalenoci od stanu pozycji menu o etykiecie
Potwierdzenie odbioru przeczamy pole

RequestDeliveryReport

obiektu reprezentu-

jcego wiadomo SMS.

Aplikacja wysyajca SMS-y jest ju gotowa do testów. Naley oczywicie pamita,
e jej dziaanie jest uzalenione od obecnoci sieci komórkowej. Zatem do jej urucho-
mienia na emulatorze konieczne jest poczenie z programem Cellular Emulator. Ten
ostatni pozwala monitorowa SMS-y wysyane przez emulator. Suy do tego lista
Receive from device (z ang. otrzymane z urzdzenia) widoczna na zakadce SMS (rysu-
nek 8.9). Pamitajmy równie, aby przed uruchomieniem aplikacji zmieni w pasku
narzdzi w rozwijanej licie Target Device urzdzenie lub emulator na taki, który zawiera
telefon (a wic np. Windows Mobile 6 Professional Emulator).

Rysunek 8.9.
Monitorowanie
SMS-ów wysanych
z emulatora

Numer telefonu
w parametrach uruchomienia aplikacji

Aby móc uy aplikacji pozwalajcej na redagowanie i wysyanie SMS-ów jako apli-
kacji pomocniczej, wykorzystywanej w innych aplikacjach, konieczne jest przekazy-
wanie do niej informacji o adresacie. Najlepiej nadaje si do tego numer telefonu, który
w zasadzie mona traktowa jak identyfikator kontaktu. Zmodyfikujmy powysz apli-
kacj tak, aby moga suy jako rodzaj okna dialogowego.

1.

W klasie

Form1

definiujemy nowe pole:

bool zamknijPoWyslaniu = false;

2.

Do tej klasy dodajemy równie metod z listingu 8.8.

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

225

Listing 8.8.

W metodzie korzystamy z technologii LINQ, zatem wymaga ona platformy .NET Compact

w wersji 3.5

public void sprawdzKontakt(string numerTelefonu)
{
if (numerTelefonu == null || numerTelefonu == "") return;

OutlookSession outlook = new OutlookSession();
var kontakty = from Contact kontakt in outlook.Contacts.Items
where kontakt.MobileTelephoneNumber==numerTelefonu
select kontakt.FirstName + " " + kontakt.LastName + " <" +

´kontakt.MobileTelephoneNumber + ">";

if (kontakty.Count() == 0) adresatTextBox.Text = numerTelefonu;
else adresatTextBox.Text = kontakty.First<string>();
wyslijMenuItem.Enabled = true;
zamknijPoWyslaniu = true;
}

3.

Metod t wywoamy w zmodyfikowanym konstruktorze. Prosz zwróci
uwag, e jednoczenie konstruktor wyposaylimy w argument typu

string

(listing 8.9).

Listing 8.9.

Dodajemy argument do konstruktora — w ten sposób przekazywa bdziemy do formy

argument linii komend

public Form1(string numerTelefonuAdresata)
{
InitializeComponent();

this.numerTelefonuAdresata = numerTelefonuAdresata;
sprawdzKontakt(numerTelefonuAdresata);
}

4.

Uzupeniamy metod wysyajc SMS tak, aby w razie powodzenia i odpowiedniej
wartoci pola

zamknijPoWyslaniu

zamykaa ona ca aplikacj (listing 8.10).

Listing 8.10.

Jeeli aplikacja zostaa uruchomiona jako „niby-okno dialogowe”, zostanie zamknita tu

po wysaniu SMS-a

private void wyslijMenuItem_Click(object sender, EventArgs e)
{
SmsMessage sms = new SmsMessage(numerTelefonuAdresata, tekstTextBox.Text);
sms.RequestDeliveryReport = potwierdzenieOdbioruMenuItem.Checked;
try
{
sms.Send();
MessageBox.Show("Wiadomo zostaa wysana!");
if (zamknijPoWyslaniu) Close();
}
catch
{
MessageBox.Show("Nie udao si wysa wiadomoci!");
return;
}
}

background image

226

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

5.

I na koniec wczytujemy do edytora plik Program.cs, w którym odczytujemy
pierwszy parametr linii komend i przekazujemy go do konstruktora klasy

Form1

(listing 8.11).

Listing 8.11.

Przekazujemy argument linii komend do konstruktora formy

using System;
using System.Linq;
using System.Collections.Generic;
using System.Windows.Forms;

namespace SMS
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[MTAThread]
static void Main(string[] argumenty)
{
string numerTelefonuAdresata = "";
if (argumenty.Count() > 0) numerTelefonuAdresata = argumenty[0];
Application.Run(new Form1(numerTelefonuAdresata));
}
}
}

6.

Aby przetestowa dziaanie aplikacji, otwórzmy ustawienia projektu SMS
(menu Project, polecenie SMS Properties…) i na zakadce Debug w polu
Command line arguments wpiszmy numer 7272021, tj. fikcyjny numer
przypisany do jednego z kontaktów (rysunek 8.10).

7.

Po uruchomieniu powinnimy zobaczy okno aplikacji z zapenionym polem
adresata.

Korzystanie z aplikacji wysyajcej SMS-y
jak z okna dialogowego

1.

Usuwamy argumenty linii komend w ustawieniach projektu SMS
(por. rysunek 8.10).

2.

Zmieniamy projekt startowy rozwizania z powrotem na projekt Kontakty.

3.

Do projektu Kontakty dodajemy plik SMS.exe, który znajdziemy w podkatalogu
SMS\bin\Debug. Zaznaczmy go w podoknie Solution Explorer i w podoknie
Properties zmiemy jego wasno Copy to Output Directory na Copy if newer.

4.

W projekcie Kontakty, na zakadce Form1.cs [Design], na podgldzie formy
dodajemy do menu Telefon pozycj SMS. Tworzymy jej domyln metod
zdarzeniow i umieszczamy w niej kod widoczny na listingu 8.12.

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

227

Rysunek 8.10.

Ustawianie argumentu wysyanego do aplikacji uruchamianej w otoczeniu debugera

Visual Studio

Listing 8.12.

Uruchamianie aplikacji SMS.exe z argumentem zawierajcym numer telefonu

static string katalogAplikacji
{
get
{
string katalog = System.IO.Path.GetDirectoryName(System.Reflection.

´Assembly.GetExecutingAssembly().GetName().CodeBase);

if (katalog.StartsWith("file:")) katalog = katalog.Remove(0, 6);
return katalog;
}
}

private void menuItem6_Click(object sender, EventArgs e)
{
Contact kontakt=outlook.Contacts.Items[dataGrid1.CurrentCell.RowNumber];
string numerTelefonu = kontakt.MobileTelephoneNumber;
if (numerTelefonu!="")
{
string sciezkaDoPliku = System.IO.Path.Combine(katalogAplikacji,

´"SMS.exe");

System.Diagnostics.ProcessStartInfo psi = new

´System.Diagnostics.ProcessStartInfo(sciezkaDoPliku, numerTelefonu);

System.Diagnostics.Process.Start(psi);
}
else MessageBox.Show("Wybrany kontakt nie zawiera numeru telefonu

´komórkowego");

}

background image

228

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

Zwrómy uwag, e cieka do pliku SMS.exe wyznaczana jest na podstawie katalogu
aplikacji. Wykorzystujemy do tego wasno

katalogAplikacji, któr zdefiniowalimy

w rozdziale 6.

Po zmianie z punktu 2. nacinicie klawisza F5 spowoduje skompilowanie i urucho-
mienie aplikacji Kontakty. W widocznej w jej oknie siatce moemy zaznaczy kontakt
i z menu Telefon wybra polecenie SMS. Wówczas aplikacja wywoa aplikacj SMS
z parametrem okrelajcym numer telefonu komórkowego. Natomiast jeeli wybrany
kontakt nie ma zapisanego numeru komórkowego, wywietlony zostanie informujcy
o tym komunikat.

Wysyanie poczty elektronicznej

Z perspektywy programisty platformy .NET Compact wysyanie wiadomoci e-mail
via Outlook jest bardzo podobne do wysyania wiadomoci SMS, które równie wysy-
ane s za porednictwem programu Outlook. Nie bdziemy zatem mieli z tym adnych
problemów.

Aby podkreli owe podobiestwa, ograniczymy aplikacj wysyajc poczt elektro-
niczn w taki sposób, e list bdzie móg mie tylko jednego adresata. Jest to jednak ogra-
niczenie do sztuczne — w razie potrzeby Czytelnik moe je bez problemu usun.

Metoda wybierajca adres e-mail z listy kontaktów

Do rozwizania Kontakty dodajemy kolejny projekt o nazwie Email (pamitajmy
o wskazaniu platformy Windows Mobile 6 Professional). Zawarto formy budujemy
analogicznie do projektu SMS, moemy j nawet po prostu skopiowa (w widoku pro-
jektowania wszystkie kontrolki okna mona zaznaczy, naciskajc kombinacj klawiszy
Ctrl+A)! Zbiór kontrolek uzupenimy za chwil o pole tekstowe, w którym wpiszemy
tytu listu, i rozwijan list pozwalajc na wybór konta. Nastpnie dodajmy do projektu
biblioteki DLL Microsoft.WindowsMobile.PocketOutlook.dll i Microsoft.WindowsMobile.
Forms.dll
. Dalej postpujemy identycznie, jak opisano w projekcie SMS, z wyjtkiem
nazwy pola typu

string

, które zamiast

numeTelefonuAdresata

nazywamy teraz

adres

´

EmailAdresata

. Postpujemy tak a do momentu, w którym definiujemy metod zda-

rzeniow zwizan ze zdarzeniem

Click

komponentu

kontaktyButton

. Jej now wersj,

nieznacznie tylko rónic si od pierwowzoru, prezentuje listing 8.13.

Listing 8.13.

Wybór adresata wiadomoci w ksice kontaktów (szare to wskazuje zmiany w kodzie

wzgldem wersji dla projektu SMS)

private void kontaktyButton_Click(object sender, EventArgs e)
{
ChooseContactDialog wybierzKontakt = new ChooseContactDialog();
wybierzKontakt.RequiredProperties = new ContactProperty[]

´{ContactProperty.AllEmail };

wybierzKontakt.Title = "Wybierz adresata";

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

229

wybierzKontakt.ChooseContactOnly = false;
if (wybierzKontakt.ShowDialog() == DialogResult.OK)
{
adresEmailAdresata = wybierzKontakt.SelectedPropertyValue;
adresatTextBox.Text = wybierzKontakt.SelectedContactName
+ " <" + adresEmailAdresata + ">";
wyslijMenuItem.Enabled = true;
}
}

Porównujc listingi 8.13 i 8.5, widzimy jak niewiele jest zmian (zaznaczone zostay
szarym tem). Obecnie wasno

RequiredProperties

ustalilimy tak, aby okno dialogowe

wyboru kontaktu wywietlio tylko te kontakty, które maj wpisany adres e-mail. Oprócz
tego poprzez ustawienie wasnoci okna dialogowego o nazwie

ChooseContactOnly

na

false

dajemy moliwo wyboru konkretnego adresu e-mail w przypadku, gdy z danym

kontaktem zwizanych jest wicej adresów poczty elektronicznej.

Wybór zacznika, komponowanie
i wysyanie listu e-mail

Wrómy do projektowania okna pozwalajcego na przygotowanie listu. Zawarto okna
skopiowana z projektu SMS nie pozwala na wybór konta poczty elektronicznej ani na
wpisanie tytuu. Musimy równie umoliwi wybór pliku zacznika wysyanego wraz
z listem. T ostatni moliwo dodamy jednak nie do okna, które nie jest przecie zbyt
due, a do menu.

1.

W podoknie Toolbox zaznaczamy komponent okna dialogowego wyboru pliku

OpenFileDialog

i umieszczamy go na podgldzie formy, a nastpnie w edytorze

wasnoci (podokno Properties) czycimy zawarto pola przy wasnoci

FileName

tego komponentu. Okna dialogowego uyjemy do wyboru pliku, który

ma by ewentualnie doczony do wysyanego listu.

2.

W menu aplikacji usuwamy pozycj Potwierdzenie odbioru (usuwamy take
zwizan z ni metod zdarzeniow) i zastpujemy j pozycj Wybierz plik
zacznika…
(zmieniamy jej nazw na

zalacznikMenuItem

), nastpnie tworzymy

metod zwizan ze zdarzeniem

Click

dla tej opcji zgodnie z listingiem 8.14.

Dodajemy równie pozycj Usu zacznik, której metoda zdarzeniowa równie
widoczna jest na listingu 8.14.

Listing 8.14.

Wybór pliku zacznika

private void zalacznikMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
tekstTextBox.Text = openFileDialog1.FileName;
zalacznikMenuItem.Checked = true;
}
}

private void usunZalacznikMenuItem_Click(object sender, EventArgs e)

background image

230

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

{
openFileDialog1.FileName = "";
zalacznikMenuItem.Checked = false;
}

3.

W klasie formy

Form1

definiujemy pole:

OutlookSession outlook = new OutlookSession();

4.

Do formy dodajemy pole tekstowe

TextBox

(zmiemy jego nazw

na

tytulTextBox

) oraz etykiet o treci Tytu (rysunek 8.11).

Rysunek 8.11.

Projekt interfejsu aplikacji do wysyania poczty elektronicznej

5.

Do formy dodajemy równie rozwijan list

ComboBox

(

kontaComboBox

), której

zawarto wypenimy dostpnymi kontami poczty elektronicznej. W tym celu
w konstruktorze odczytujemy nazwy kont, których tablic wskazujemy jako
ródo danych rozwijanej listy (listing 8.15).

Listing 8.15.

Zapisywanie nazw kont poczty elektronicznej do rozwijanej listy

public Form1()
{
InitializeComponent();

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

231

var konta = from EmailAccount konto in outlook.EmailAccounts
select konto.Name;
kontaComboBox.DataSource = konta.ToArray<string>();
}

6.

Nastpnie ze zdarzeniem

Click

pozycji menu Wylij wiemy metod

przedstawion na listingu 8.16.

Listing 8.16.

Wysyanie wiadomoci e-mail

private void wyslijMenuItem_Click(object sender, EventArgs e)
{
EmailMessage email = new EmailMessage();
email.To.Add(new Recipient(adresEmailAdresata));
email.BodyText = tekstTextBox.Text;
email.Subject = tytulTextBox.Text;

if (zalacznikMenuItem.Checked) email.Attachments.Add(new

´Attachment(openFileDialog1.FileName));

try
{
EmailAccount konto = outlook.EmailAccounts[kontaComboBox.Text];
konto.Send(email);
MessagingApplication.Synchronize(konto);
MessageBox.Show("Wiadomo zostaa umieszczona w skrzynce nadawczej konta

´"+konto.Name+"!");

if (zamknijPoWyslaniu) Close();
}
catch
{
MessageBox.Show("Nie udao si wysa wiadomoci!");
}
}

Pola instancji klasy

EmailMessage

daj nam moliwo ustalenia listy adresatów wia-

domoci (pole-kolekcja

To

), adresatów, do których wysyane s kopie listu (pole

CC

),

jak i ukrytych adresatów (

Bcc

). Obiekt ten pozwala równie ustali tre listu (odpo-

wiada za to wasno

BodyText

), tytu (

Subject

), zbiór zaczników (

Attachments

), jak

równie priorytet (pole

Importance

, które moe przyjmowa wartoci

High

,

Low

lub

Normal

) i stopie poufnoci (pole

Sensitivity

, którego wartoci mog by ustawione

na:

Private

,

Confidential

,

Personal

,

Normal

). Nie wszystkie z tych pól wykorzystalimy

w powyszym programie, w szczególnoci nasz list ma zawsze tylko jednego adresata,
ale te nie byo naszym celem tworzenie w peni funkcjonalnego programu pocztowego.

Sam proces wysyania wiadomoci dzieli si na dwa etapy. Pierwszy (zwizany z wywo-
aniem metody

konto.Send(email)

) to tylko przygotowanie wiadomoci do wysania;

moe by wykonany bez aktywnego poczenia z internetem. Jego efektem jest umiesz-
czenie listu w skrzynce nadawczej wybranego przez uytkownika konta skonfigurowa-
nego w mobilnej wersji programu Outlook. W drugim etapie, który w naszej aplikacji
wymuszany jest tu po pierwszym poleceniem

MessagingApplication.Synchronize

´

(konto);

, w ramach synchronizacji skrzynki pocztowej z serwerem poczty list wysyany

background image

232

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

jest do serwera pocztowego i dalej do adresata. Poniewa proces ten realizowany jest
asynchronicznie, nie jestemy w stanie stwierdzi, czy operacja si udaa, ani wykry jej
zakoczenia. Dlatego komunikat wywietlany na zakoczenie metody potwierdza jedynie
umieszczenie listu w skrzynce nadawczej Outlooka.

Emulator, którego uywamy do testowania aplikacji, mona poczy z rzeczywist
sieci. Moemy to zrobi na dwa sposoby. Pierwszy to udostpnienie emulatorowi karty
sieciowej z naszego komputera. W tym celu z menu emulatora naley wybra pozycj
Configure i na zakadce Network zaznaczy pole opcji Enable NE2000 PCMCIA network
adapter and bind to
, a nastpnie z rozwijanej listy wybra jedn z kart sieciowych
komputera, na którym uruchomiony jest emulator. Takie poczenie wymaga jednak
wczeniejszego zainstalowania programu Virtual PC 2007 i posiadania karty siecio-
wej, która czy nas internetem. Druga metoda to poczenie emulatora z programem
ActiveSync (w Windows XP) lub Centrum obsugi urzdze z systemem Windows
Mobile (w Windows Vista i Windows 7) za pomoc Device Emulator Manager. T
metod opisujemy i stosujemy na pocztku rozdziau 14.

Przygotowane powyej okno pozwalajce na komponowanie listu jest w zasadzie tylko
pretekstem do poznania klas i metod obsugujcych poczt elektroniczn. W powa-
niejszych zastosowaniach do komponowania listu lepiej uy gotowego okna dialo-
gowego, dostpnego po wywoaniu metody

MessagingApplication.DisplayCompose

´Form. Jest to metoda wielokrotnie przeciona, ale Czytelnik, który przestudiowa
powysze wiczenia, nie powinien mie z jej uyciem adnych problemów.

Korzystanie z aplikacji wysyajcej listy
jak z okna dialogowego

1.

Analogicznie jak w przypadku projektu SMS, definiujemy w klasie

Form1

metod

sprawdzKontakt

(listing 8.17) oraz modyfikujemy konstruktor klasy

Form1

(listing 8.18) i metod

Program.Main

(listing 8.19) zdefiniowan w pliku

Program.cs, tak aby moliwe byo przesanie adresu e-mail przez parametr
aplikacji.

Listing 8.17.

Jeeli opis adresata jest dostpny — wywietlamy go

public void sprawdzKontakt(string adresEmail)
{
if (adresEmail == null || adresEmail == "") return;

OutlookSession outlook = new OutlookSession();
var kontakty = from Contact kontakt in outlook.Contacts.Items
where (kontakt.Email1Address == adresEmail) ||
(kontakt.Email2Address == adresEmail) ||
(kontakt.Email3Address == adresEmail)
select kontakt.FirstName+" "+kontakt.LastName+"

´<"+adresEmail+">";

if (kontakty.Count() == 0) adresatTextBox.Text = adresEmail;
else adresatTextBox.Text = kontakty.First<string>();

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

233

wyslijMenuItem.Enabled = true;
zamknijPoWyslaniu = true;
}

Listing 8.18.

Forma odbierze adres e-mail przez argument konstruktora

public Form1(string adresEmailAdresata)
{
InitializeComponent();

var konta = from EmailAccount konto in outlook.EmailAccounts
select konto.Name;
kontaComboBox.DataSource = konta.ToArray<string>();

this.adresEmailAdresata = adresEmailAdresata;
sprawdzKontakt(adresEmailAdresata);
}

Listing 8.19.

Przekazywanie argumentu linii komend zawierajcego adres e-mail do konstruktora

static void Main(string[] argumenty)
{
string adresEmailAdresata = "";
if (argumenty.Count() > 0) adresEmailAdresata = argumenty[0];
Application.Run(new Form1(adresEmailAdresata));
}

2.

Budujemy projekt Email (F6).

3.

Nastpnie przechodzimy do projektu Kontakty i jeeli to konieczne, ustawiamy
go jako projekt startowy rozwizania. Do tego projektu doczamy plik Email.exe
(efekt kompilacji projektu Email), pamitajc, aby w podoknie Properties zmieni
jego wasno Copy to Output Directory na Copy if newer.

4.

W formie projektu Kontakty do menu Outlook dodajemy pozycj Napisz
wiadomo (e-mail)
i tworzymy jej domyln metod zdarzeniow, w której
umieszczamy polecenia z listingu 8.20. Metoda ta korzysta z wczeniej
przygotowanej wasnoci

katalogAplikacji

(listing 8.12).

Listing 8.20.

Uruchamianie aplikacji wysyajcej e-mail

private void menuItem7_Click(object sender, EventArgs e)
{
Contact kontakt = outlook.Contacts.Items[dataGrid1.CurrentCell.RowNumber];
string adresEmail = kontakt.Email1Address;
if (adresEmail == "") adresEmail = kontakt.Email2Address;
if (adresEmail == "") adresEmail = kontakt.Email3Address;
if (adresEmail != "")
{
string sciezkaDoPliku = System.IO.Path.Combine(katalogAplikacji,

´"Email.exe");

System.Diagnostics.ProcessStartInfo psi = new

´System.Diagnostics.ProcessStartInfo(sciezkaDoPliku, adresEmail);

System.Diagnostics.Process.Start(psi);

background image

234

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

}
else MessageBox.Show("Wybrany kontakt nie zawiera adresu poczty

´elektronicznej");

}

Przechwytywanie wiadomoci SMS

Poczwszy od Windows Mobile 5 i .NET Compact Framework 2.0, istnieje moliwo
odczytywania przychodzcych wiadomoci SMS — zarówno ledzenia ich nadejcia, jak
i odczytywania ich treci. Jest to ciekawa funkcjonalno, któr moemy wykorzysta
nie tylko do napisania wasnej aplikacji sucej do czytania wiadomoci, ale take do
zdalnego zarzdzania urzdzeniem przenonym poprzez sterowanie w nim wiadomo-
ciami SMS czy te do komunikacji pomidzy aplikacjami na rónych urzdzeniach.

Zadaniem aplikacji, któr teraz przygotujemy, bdzie wykrywanie i odczytywanie wia-
domoci rozpoczynajcych si od okrelonego cigu znaków, a nastpnie oddzwanianie
na numer telefonu, z którego wiadomo zostaa wysana

3

.

Tworzenie aplikacji przechwytujcej wiadomoci

Stworzymy teraz aplikacj dla urzdzenia przenonego, przechwytujc (odczytujc)
wiadomoci SMS rozpoczynajce si od okrelonego tekstu. W tym celu:

1.

W rodowisku Visual Studio tworzymy nowy projekt aplikacji dla urzdzenia
przenonego — dla platformy Windows Mobile 6 Professional, korzystajcy
z.NET Compact Framework Version 3.5. Nazwijmy go Przechwytywanie SMS.

2.

Z menu Project wybieramy Add Reference…, a nastpnie na zakadce .NET,
przytrzymujc klawisz Ctrl, zaznaczamy biblioteki
Microsoft.WindowsMobile.PocketOutlook, Microsoft.WindowsMobile oraz
Microsoft.WindowsMobile.Telephony. Klikamy przycisk OK.

Klasy potrzebne do przechwytywania (odczytywania) wiadomoci SMS znajduj si
w bibliotekach Microsoft.WindowsMobile.PocketOutlook oraz Microsoft.WindowsMobile.
Bibliotek Microsoft.WindowsMobile.Telephony dodalimy, aby móc oddzwania na
numer nadawcy wiadomoci.

3.

Do zbioru deklaracji przestrzeni nazw na pocztku pliku Form1.cs dodajemy:

using Microsoft.WindowsMobile.PocketOutlook;
using Microsoft.WindowsMobile.PocketOutlook.MessageInterception;
using Microsoft.WindowsMobile.Telephony;

3

Pomys na oddzwanianie do adresata przechwyconej wiadomoci powsta w wyniku zainspirowania
prezentacj Bartomieja Zassa Programowanie urzdze mobilnych przedstawion na konferencji
„Microsoft IT Academy Day 2008” na Uniwersytecie Mikoaja Kopernika w Toruniu.

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

235

4.

Na formie umieszczamy kontrolk

ListBox

i dokujemy j do caego obszaru

klienta formy.

5.

W klasie formy

Form1

definiujemy pole:

MessageInterceptor przechwytywanieSms;

6.

Tworzymy prywatn metod

ustawPrzechwytywanieSms

klasy

Form1

zgodnie

z listingiem 8.21.

Listing 8.21.

Ustawienie przechwytywania wiadomoci SMS

void ustawPrzechwytywanieSms(out MessageInterceptor przechwytywanieSms)
{
przechwytywanieSms = new

´MessageInterceptor(InterceptionAction.NotifyAndDelete);

przechwytywanieSms.MessageCondition = new

´MessageCondition(MessageProperty.Body,

MessagePropertyComparisonType.StartsWith, "cmd:", true);
przechwytywanieSms.MessageReceived +=
new MessageInterceptorEventHandler(przechwytywanieSms_MessageReceived);
}

Jak wida, w powyszym kodzie kluczow rol peni klasa

MessageInterceptor

, której

instancja jest powiadamiana przez podsystem przesyania komunikatów (ang. messaging
subsystem
), gdy nadchodzca wiadomo spenia zdefiniowane w niej warunki. Instan-
cja tej klasy zgasza wówczas zdarzenie

MessageReceived

. W naszym przypadku tre

wiadomoci SMS musi rozpoczyna si od znaków „cmd:”. Podajc w jego konstruktorze
argument

InterceptionAction.NotifyAndDelete

, powodujemy, e wiadomo, która

spenia warunki okrelone w polu

MessageCondition

, zostanie po wykonaniu metody

zdarzeniowej usunita i nie trafi do skrzynki odbiorczej. Program dziaa wic bdzie tak,
e bdziemy przechwytywali te wiadomoci SMS, które su do kontroli urzdzenia.
Uytkownik w ogóle nie bdzie wiadomy ich otrzymywania.

Po utworzeniu instancji klasy

MessageInterceptor

okrelamy warunki, jakie musi

speni wiadomo, aby zostaa przechwycona. Tworzymy w tym celu obiekt typu

MessageCondition

, który przypisujemy do pola o tej samej nazwie obiektu odpowiedzial-

nego za przechwytywanie SMS-ów. Argumentami konstruktora obiektu-warunku s:
pole, które ma by analizowane (w naszym przypadku tre wiadomoci

MessageProper

´

ty.Body

), nastpnie sposób analizy i wreszcie szukany cig znaków (jak wspomniaem

wyej, wiadomo ma zaczyna si od tekstu „cmd:”). Ostatni argument konstruktora
to warto logiczna okrelajca, czy przy porównywaniu naley zwraca uwag na
wielko liter.

Analogicznie, konstruujc warunki, moglibymy da, aby tre wiadomoci ko-
czya si jakim cigiem znaków albo po prostu aby ów cig by obecny gdziekolwiek
w treci wiadomoci. Moglibymy te zamiast treci wiadomoci weryfikowa jej
nadawc i przechwytywa wycznie wiadomoci z okrelonego numeru telefonu.

Ostatnie polecenie w metodzie,

ustawPrzechwytywanieSms

, to dodanie nieistniejcej

jeszcze metody zdarzeniowej do zdarzenia

MessageReceived

obiektu

przechwytywanieSms

.

background image

236

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

Jak wspomniaem wczeniej, zdarzenie to bdzie zgaszane za kadym razem, gdy obiekt

przechwytywanieSms

wykryje wiadomo SMS z „cmd:” na pocztku.

1.

Tworzymy now metod klasy

Form1

zgodnie z listingiem 8.22.

Listing 8.22.

Metoda odpowiedzialna za reakcj na zdarzenie MessageReceived

void przechwytywanieSms_MessageReceived(object sender, MessageInterceptorEventArgs e)
{
string
plikExe=System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
System.Diagnostics.Process.Start(plikExe, ""); //przywolanie okna aplikacji

SmsMessage sms = (SmsMessage)e.Message;
listBox1.Items.Add(sms.From.Name + ": " + sms.Body);
if (sms.Body.StartsWith("cmd:callback"))
{
string nt = sms.From.Address; //opis kontaktu z numerem telefonu
if (nt.Contains(">"))
{
nt = nt.Remove(0, nt.LastIndexOf("<") + 1);
nt = nt.Remove(nt.IndexOf(">"), nt.Length - nt.IndexOf(">"));
}
listBox1.Items.Add(" Oddzwaniam na numer " + nt);

new Phone().Talk(nt);
}
else listBox1.Items.Add(" Polecenie nierozpoznane");
}

W powyszej metodzie okrelamy zachowanie programu po przechwyceniu
wiadomoci speniajcej ustalone warunki. Analizujemy jeszcze raz tre
wiadomoci i jeli rozpoczyna si ona od tekstu „cmd:callback”, inicjujemy
poczenie telefoniczne z numerem nadawcy wiadomoci. Jeeli numer nadawcy
znajduje si w ksice kontaktów, to pole

sms.From.Address

bdzie zawiera

take nazw tego kontaktu. Wówczas numer bdzie si znajdowa w ostrych
nawiasach (np. „Kowalski, Jan <+7272024>”). W takim przypadku konieczne
jest „wycicie” samego numeru telefonu spomidzy ostrych nawiasów, co
w powyszym kodzie czynimy, usuwajc zbdn cz acucha metod

Remove

.

W razie rozwoju aplikacji i zwikszenia liczby polece, na które powinna ona
reagowa, konieczna bdzie zmiana instrukcji

if

na instrukcj

switch

. Na

razie staraem si, aby metoda zdarzeniowa bya tak prosta, jak to tylko moliwe.

Pierwsze polecenie metody z listingu 8.22, które w istocie jest instrukcj uruchomie-
nia biecej aplikacji, w przypadku gdy aplikacja ju dziaa, ogranicza si do przywo-
ania jej okna na ekran (oczywicie jeeli zostao ono wczeniej zminimalizowane).
Dzieje si tak, gdy w Windows Mobile aplikacje maj tylko pojedyncze instancje.
Bardziej naturalna metoda formy

BringToFront niestety w tej sytuacji nie dziaa

w sposób zadowalajcy. Mona to polecenie oczywicie pomin, jeeli nie chcemy,
aby aplikacja si ujawniaa.

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

237

2.

Po tych przygotowaniach moemy wczy przechwytywanie SMS-ów,
dodajc do konstruktora klasy

Form1

wywoanie metody

ustawPrzechwytywanieSms

:

ustawPrzechwytywanieSms(out przechwytywanieSms);

3.

W widoku projektowania formy dodajemy do menu element z etykiet Zamknij
(

menuItem1

) i tworzymy dla niego domyln metod zdarzeniow (zwizan

ze zdarzeniem

Click

), umieszczajc w niej wywoanie metody

Close

.

4.

Nastpnie tworzymy metod zdarzeniow formy do zdarzenia

Closed

na podstawie listingu 8.23.

Listing 8.23.

Usunicie zdarzenia MessageReceived przed zakoczeniem aplikacji

private void Form1_Closed(object sender, EventArgs e)
{
przechwytywanieSms.MessageReceived -= przechwytywanieSms_MessageReceived;
przechwytywanieSms.Dispose();
}

Kiedy utworzylimy instancj klasy

MessageInterceptor

i uylimy zdarzenia

Message

´

Received

(listing 8.21), do rejestru w kluczu HKEY_LOCAL_MACHINE\Software\

Microsoft\Inbox\Rules dodany zosta wpis, dziki któremu podsystem odpowiedzialny
za przesyanie komunikatów informuje nasz aplikacj o nadchodzcych wiadomo-
ciach. Wpis ten nie zawsze jest poprawnie usuwany z rejestru przy zamkniciu apli-
kacji, co moe mie negatywny wpyw na kolejne próby przetwarzania wiadomoci.
Dlatego przed zakoczeniem aplikacji naley samodzielnie zadba o usunicie tego
wpisu, co czynimy, opróniajc zbiór metod zwizanych ze zdarzeniem (listing 8.23).

Aplikacj najlepiej testowa na emulatorze urzdzenia poczonym z Cellular Emulator,
dziki czemu moemy wysya testowe wiadomoci SMS do emulatora urzdzenia
bez martwienia si o koszty. Pozwala na to panel Send to device z zakadki SMS. Przy-
kadowy efekt dziaania aplikacji pokazany jest na rysunku 8.12.

Trwae monitorowanie wiadomoci

Wiadomoci s przechwytywane tylko wtedy, gdy aplikacja jest aktualnie uruchomiona.
Moemy jednak ustawi trwae przechwytywanie wiadomoci SMS speniajcych
okrelone warunki, bez wzgldu na to, czy nasza aplikacja jest aktualnie uruchomiona,
czy te nie. Jest to moliwe dziki temu, e podsystem przesyania komunikatów w razie
wykrycia wiadomoci speniajcej kryteria moe uruchomi aplikacj i dopiero wów-
czas przekaza jej otrzyman wiadomo.

1.

W klasie formy

Form1

zdefiniujmy pole — cig znaków, dziki któremu bdziemy

jednoznacznie identyfikowa „przechwytywacz” SMS-ów ustawiany w aplikacji

4

:

string id = "unikalny identyfikator";

4

Kada instancja klasy

MessageInterceptor

ma wasny identyfikator. Aplikacja moe tworzy kilka

obiektów tego typu.

background image

238

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

Rysunek 8.12.
Reakcja na odebranie
SMS-a

2.

Modyfikujemy równie metod

ustawPrzechwytywanieSms

klasy

Form1

— zgodnie

z listingiem 8.24.

Listing 8.24.

Ustawienie trwaego przechwytywania wiadomoci SMS

private void ustawPrzechwytywanieSms(out MessageInterceptor przechwytywanieSms)
{
if (!MessageInterceptor.IsApplicationLauncherEnabled(id))
{
przechwytywanieSms = new

´MessageInterceptor(InterceptionAction.NotifyAndDelete);

przechwytywanieSms.MessageCondition = new

´MessageCondition(MessageProperty.Body,

MessagePropertyComparisonType.StartsWith, "cmd:", true);
przechwytywanieSms.EnableApplicationLauncher(id);
}
else przechwytywanieSms = new MessageInterceptor(id);
przechwytywanieSms.MessageReceived +=
new MessageInterceptorEventHandler(przechwytywanieSms_MessageReceived);
}

Kod metody niewiele si zmieni. Za ustawienie trwaego przechwytywania
wiadomoci odpowiedzialne jest polecenie

przechwytywanieSms.EnableApplication-

Launcher(id);

. Jednak ustawiamy je tylko wtedy, kiedy nie jest ono jeszcze

aktywne, co moemy sprawdzi, wywoujc statyczn metod

MessageInterceptor.IsApplicationLauncherEnabled

. W przeciwnym razie

tworzymy instancj klasy

MessageInterceptor

na podstawie istniejcego

identyfikatora zapisanego w polu

id

(w zapisanych w rejestrze danych znajduje

si ju informacja o warunku nakadanym na wiadomoci SMS).

3.

Modyfikujemy metod zdarzeniow formy do zdarzenia

Closed

zgodnie

z listingiem 8.25.

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

239

Listing 8.25.

Przy zamykaniu aplikacji uytkownik bdzie pytany o to, czy zachowa w rejestrze trwae

przechwytywanie SMS-ów

private void Form1_Closed(object sender, EventArgs e)
{
DialogResult wybor = MessageBox.Show(
"Czy chcesz reagowa na polecenia w wiadomociach SMS za pomoc tej

´aplikacji po jej zamkniciu?",

"Zachowa przechwytywanie?",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button2);
if (wybor == DialogResult.No) przechwytywanieSms.DisableApplicationLauncher();

przechwytywanieSms.MessageReceived -= przechwytywanieSms_MessageReceived;
przechwytywanieSms.Dispose();
}

Przy zamykaniu aplikacji dajemy uytkownikowi moliwo wyboru, czy zachowa
przechwytywanie po zamkniciu aplikacji. Jeli w oknie komunikatu wybierze No, usu-
wamy ustawione trwae przechwytywanie. W przeciwnym razie przechwytywanie pozo-
stanie i aplikacja zastanie automatycznie uruchomiona w przypadku nadejcia wiado-
moci speniajcej zadane kryteria.

Odczytywanie otrzymanych wczeniej SMS-ów przechowywanych w systemie i dostp-
nych dziki interfejsowi MAPI nie jest ju takie proste. Kilka wskazówek na ten
temat znajdzie Czytelnik pod adresem http://www.codeproject.com/KB/mobile/
PocketPCandSmartphone.aspx
.

W nastpnym rozdziale w bardzo podobny sposób „nauczymy” aplikacj reagowa
na inne zdarzenia zwizane ze stanem systemu i urzdzenia przenonego.

Kalendarz i zadania

Wrómy jeszcze na chwil do programu Outlook. Kalendarz i lista zada to obecnie stan-
dard w urzdzeniach przenonych, a nawet w zwykych telefonach komórkowych, dlatego
nie mogoby tu zabrakn informacji o ich obsudze z poziomu kodu. Pokaemy zatem,
jak wywietla i dodawa terminy spotka oraz zadania w kalendarzu Outlooka.

Lista zada i terminów zapisanych w kalendarzu

Zacznijmy od stworzenia aplikacji wywietlajcej wszystkie pola terminów i zada:

1.

W rodowisku Visual Studio tworzymy nowy projekt aplikacji dla urzdzenia
przenonego na platform Windows Mobile 6 Professional korzystajc z .NET
Compact Framework Version 3.5. Projekt nazywamy Kalendarz.

background image

240

Programowanie aplikacji dla urzdze mobilnych z systemem Windows Mobile

2.

Z podokna Toolbox wybieramy komponent

DataGrid

, umieszczamy go na formie,

a nastpnie w podoknie wasnoci ustawiamy jego wasno

Dock

na

Fill

.

3.

W menu Project wybieramy Add Reference…, a nastpnie na zakadce .NET
wybieramy bibliotek Microsoft.WindowsMobile.PocketOutlook i klikamy OK.

4.

Do zbioru deklaracji przestrzeni nazw na pocztku pliku Form1.cs dodajemy:

using Microsoft.WindowsMobile.PocketOutlook;

5.

W klasie formy

Form1

definiujemy pole reprezentujce uruchomion aplikacj

Outlook Mobile:

OutlookSession outlook = new OutlookSession();

6.

W widoku projektowania tworzymy menu Kalendarz, a w nim dwie pozycje:
Wywietl terminy oraz Wywietl zadania (

menuItem2

i

menuItem3

).

7.

Nastpnie tworzymy metody zwizane ze zdarzeniami

Click

obu pozycji menu

zgodnie ze wzorem na listingu 8.26.

Listing 8.26.

Metody zdarzeniowe odpowiedzialne za wywietlenie terminów lub zada

private void menuItem2_Click(object sender, EventArgs e)
{
dataGrid1.DataSource = outlook.Appointments.Items;
}

private void menuItem3_Click(object sender, EventArgs e)
{
dataGrid1.DataSource = outlook.Tasks.Items;
}

8.

Z prawej strony menu umieszczamy polecenie Zamknij, z którym wiemy
metod zdarzeniow wywoujc metod

Close

formy.

Uruchamiamy aplikacj. W przypadku emulatora obie listy s oczywicie puste. Dlatego
za chwil przygotujemy metod dodajc przykadowe terminy i zadania.

Dodawanie nowych terminów i zada

Do dodawania nowych terminów i zada wykorzystamy gotowe okna dialogowe wywie-
tlane metodami

ShowDialog

na rzecz, odpowiednio,

outlook.Appointments

i

outlook.

´

Tasks

. Stwórzmy w menu Opcje pozycje wywoujce te dwa okna. Pozwol nam one

na dodanie nowego terminu lub zadania (rysunek 8.13).

1.

Do menu Opcje dodajemy kolejne dwie pozycje: Dodaj termin i Dodaj zadanie
(ich nazwy zmieniamy na

dodajterminMenuItem

i

dodajzadanieMenuItem

).

2.

Nastpnie tworzymy domylne metody zdarzeniowe zwizane z ich zdarzeniami

Click

zgodnie z listingiem 8.27.

W przypadku zada i terminów spotka metoda

ShowDialog

nie zwraca wartoci, podob-

nie jak miao to miejsce w zarzdzaniu kontaktami (podobnie jak w przypadku kon-

background image

Rozdzia 8.

i Obsuga podstawowych funkcji telefonu i programu Outlook

241

Listing 8.27.

Dodanie terminu oraz zadania

private void dodajterminMenuItem_Click(object sender, EventArgs e)
{
Appointment termin = new Appointment();
termin.ShowDialog();
if (termin.Subject != new Appointment().Subject)
outlook.Appointments.Items.Add(termin);
}

private void dodajzadanieMenuItem_Click(object sender, EventArgs e)
{
Task zadanie = new Task();
zadanie.ShowDialog();
if (zadanie.Subject != new Task().Subject)
outlook.Tasks.Items.Add(zadanie);
}

taktów, take zadaniami i terminami zarzdza w Windows Mobile program Outlook).
Dlatego musimy uciec si do podobnej jak zastosowana wówczas sztuczki. Tym razem
warunkiem dodania terminu lub zadania jest wpisanie jego tematu (pole

Subject

).

Rysunek 8.13.
Edycja nowego
terminu


Wyszukiwarka

Podobne podstrony:
Programowanie aplikacji dla urzadzen mobilnych z systemem Windows Mobile promob
informatyka programowanie aplikacji dla urzadzen mobilnych z systemem windows mobile jacek matulewsk
Programowanie aplikacji dla urzadzen mobilnych z systemem Windows Mobile 2
Programowanie aplikacji dla urzadzen mobilnych z systemem Windows Mobile
Programowanie grafiki OpenGL ES – programowanie grafiki dla urządzeń mobilnych
Lista modyfikacji w rejestrze dla systemu Windows Mobile
Hello Android Programowanie na platforme Google dla urzadzen mobilnych handro
Programowanie aplikacji dla Sklepu Windows w C Projektowanie innowacyjnych aplikacji sklepu Windows
Hello Android Programowanie na platforme Google dla urzadzen mobilnych Wydanie III handro
Hello Android Programowanie na platforme Google dla urzadzen mobilnych Wydanie III
Hello Android Programowanie na platforme Google dla urzadzen mobilnych Wydanie III 2
Jak włączyć Centrum Obsługi Urządzeń z systemem Windows Mobile w Windows 10
J2ME Java dla urzadzen mobilnych cwiczenia cj2me
J2ME Java dla urzadzen mobilnych cwiczenia
J2ME Java dla urzadzen mobilnych cwiczenia cj2me
Projektowanie witryn internetowych dla urzadzen mobilnych pwimob

więcej podobnych podstron