Idź do
• Spis treści• Przykładowy rozdział• Skorowidz
• Katalog online
• Dodaj do koszyka
• Zamów cennik
• Zamów informacjeo nowościach
• Fragmenty książekonline
Helion SAul. Kościuszki 1c44-100 Gliwicetel. 32 230 98 63e-mail: [email protected]© Helion 1991–2011
Katalog książek
Twój koszyk
Cennik i informacje
Czytelnia
Kontakt
• Zamów drukowanykatalog
Android w akcji.Wydanie IIAutorzy: W. Frank Ableson, Robi Sen, Chris King
Tłumaczenie: Paweł Gonera
ISBN: 978-83-246-3380-7
Tytuł oryginału: Android in Action
Format: 168×237, stron: 624
Rozbudowany podręcznik tworzenia niesamowitych aplikacji dla systemu Android!• Android SDK i programowanie aplikacji WWW
• Komunikacja Bluetooth i przetwarzanie danych z czujników
• Grafika, animacja i multimedia w Androidzie
• Techniki pisania natywnych aplikacji w języku C
Skoro zwróciłeś uwagę właśnie na tę książkę, zapewne dobrze wiesz, czym jest Android i co potrafi
– teraz przyszła pora, abyś sprawdził go także w akcji! Oto doskonała książka dla wszystkich
programistów, którym marzy się tworzenie własnych aplikacji dla robiącego oszałamiającą karierę
systemu. Choć ta książka nie jest przeznaczona dla początkujących, zawiera wszystkie informacje
potrzebne osobom, dla których Android jest całkowicie nowym środowiskiem. Można w niej
znaleźć instrukcje niezbędne do szybkiego zorientowania się w architekturze tej platformy oraz
sposobie jej działania, co pozwoli sprawnie rozpocząć pracę w tym środowisku. Pozostałe rozdziały
to już czysta frajda programowania!
Od czego zaczniesz zabawę z Androidem? Dowiesz się, jak budować aplikacje dla tego systemu
od najmniejszych cegiełek aż po ekrany, dodawać funkcje telefoniczne i wykorzystywać bibliotekę
OpenGL ES do tworzenia złożonej grafiki 2D oraz 3D. Następnie poznasz zasady tworzenia
większych aplikacji oraz techniki pisania aplikacji w języku C, także z użyciem Android Native
Development Kit. Opanujesz potężne narzędzie Android SDK oraz budowanie aplikacji dla WebKit
z użyciem HTML 5, a nawet nauczysz się rozszerzać lub zastępować wbudowane funkcje Androida
na podstawie użytecznych i intrygujących przykładów.
• Wprowadzenie do systemu Android
• Środowisko programowania
• Komponenty interfejsu użytkownika, w tym View i Layout
• Metody przechowywania i odczytywania lokalnych danych
• Sieci oraz usługi sieciowe, Bluetooth, sensory i widżety aplikacji
• Przegląd podstawowych zagadnień związanych z telefonią
• Powiadomienia i alarmy
• Grafika i animacja w Androidzie
• Korzystanie z funkcji multimedialnych Androida
• Usługi oparte na lokalizacji
• Integracja kontaktów z platformy społecznościowej
• Aplikacja wspomagająca serwisantów
• Budowanie aplikacji Android w języku C
• Tworzenie stron WWW dla systemu Android
• Strategie lokalizowania aplikacji
• Android Native Development Kit oraz korzystanie z SDK oraz AVD Manager
Wkrocz wreszcie do akcji i zacznij tworzyć własne aplikacje dla Androida!
Spis tre�ci
Wprowadzenie 13
Wprowadzenie do pierwszego wydania 15
Podzi�kowania 17
O ksi��ce 19
O ilustracji na ok�adce 25
Cz��� I. Czym jest Android? Zarys ogólny 271. Wprowadzenie do systemu Android 29
1.1. Platforma Android ....................................................................................................................... 301.2. Omówienie rynku Androida ........................................................................................................ 32
1.2.1. Operatorzy telefonii komórkowej ....................................................................................... 321.2.2. Android kontra zaawansowane telefony ............................................................................. 321.2.3. Android kontra smartfony ................................................................................................... 341.2.4. Android kontra Android ...................................................................................................... 351.2.5. Licencjonowanie Androida ................................................................................................. 35
1.3. Warstwy systemu Android .......................................................................................................... 361.3.1. Budowanie na bazie j�dra Linux ........................................................................................ 381.3.2. Praca w maszynie wirtualnej Dalvik .................................................................................. 39
1.4. Intencje w programowaniu dla Androida ................................................................................. 391.4.1. Wykorzystywanie intuicyjnego interfejsu u�ytkownika .................................................... 401.4.2. Sposób dzia�ania intencji ..................................................................................................... 40
4 Spis tre�ci
1.5. Cztery rodzaje komponentów Androida .................................................................................... 431.5.1. Klasa Activity ....................................................................................................................... 441.5.2. Klasa Service ........................................................................................................................ 451.5.3. Klasa BroadcastReceiver ..................................................................................................... 461.5.4. Klasa ContentProvider ........................................................................................................ 49
1.6. Budowa pliku AndroidManifest.xml .......................................................................................... 501.7. Odwzorowanie aplikacji na procesy .......................................................................................... 521.8. Tworzenie aplikacji dla systemu Android ................................................................................. 531.9. Podsumowanie .............................................................................................................................. 57
2. �rodowisko programowania dla systemu Android 592.1. Wprowadzenie do Android SDK ................................................................................................ 60
2.1.1. Podstawowe pakiety systemu Android ............................................................................... 612.1.2. Pakiety opcjonalne ............................................................................................................... 62
2.2. Przegl�d �rodowiska programowania ........................................................................................ 622.2.1. Perspektywa Java ................................................................................................................. 642.2.2. Perspektywa DDMS ........................................................................................................... 652.2.3. Narz�dzia wiersza polece� .................................................................................................. 68
2.3. Budowanie aplikacji dla systemu Android w Eclipse .............................................................. 712.3.1. Kreator projektu aplikacji Android ..................................................................................... 722.3.2. Kod �ród�owy przyk�adowej aplikacji Android .................................................................. 722.3.3. Pakowanie aplikacji ............................................................................................................. 79
2.4. U�ycie emulatora systemu Android ........................................................................................... 802.4.1. Konfiguracja �rodowiska emulowanego ............................................................................. 812.4.2. Testowanie aplikacji w emulatorze ..................................................................................... 85
2.5. Debugowanie aplikacji ................................................................................................................ 862.6. Podsumowanie .............................................................................................................................. 88
Cz��� II. wiczenia z Android SDK 893. Interfejs u�ytkownika 91
3.1. Tworzenie aktywno�ci ................................................................................................................. 933.1.1. Tworzenie klasy Activity ..................................................................................................... 943.1.2. Przedstawiamy cykl �ycia aktywno�ci ................................................................................ 99
3.2. Praca z widokami ....................................................................................................................... 1033.2.1. Przegl�d wspólnych widoków ........................................................................................... 1033.2.2. Korzystanie z ListView ...................................................................................................... 1053.2.3. Wielow�tkowo� z u�yciem klas Handler i Message ...................................................... 1093.2.4. Tworzenie w�asnych widoków .......................................................................................... 1113.2.5. Przedstawiamy uk�ady ....................................................................................................... 1133.2.6. Obs�uga fokusu .................................................................................................................. 1153.2.7. Przechwytywanie zdarze� ................................................................................................. 116
3.3. U�ycie zasobów ........................................................................................................................... 1173.3.1. Obs�ugiwane typy zasobów ............................................................................................... 1173.3.2. Odwo�ywanie si� do zasobów w kodzie Java ................................................................... 1183.3.3. Definiowanie widoków i uk�adów w zasobach XML ...................................................... 1203.3.4. Warto�ci zewn�trzne ......................................................................................................... 1223.3.5. Tworzenie animacji ........................................................................................................... 125
3.4. Przedstawiamy plik AndroidManifest.xml .............................................................................. 1263.5. Podsumowanie ............................................................................................................................ 128
Spis tre�ci 5
4. Intencje i us�ugi 1294.1. Obs�uga aplikacji Wyszukiwarka restauracji z u�yciem intencji ......................................... 130
4.1.1. Definiowanie intencji ........................................................................................................ 1314.1.2. Wywo�ania jawne i niejawne ............................................................................................ 1314.1.3. Dodawanie ��czy zewn�trznych do aplikacji Wyszukiwarka restauracji ....................... 1324.1.4. Wyszukiwanie celu dla intencji ........................................................................................ 1354.1.5. Wykorzystanie aktywno�ci dost�pnych w Androidzie .................................................... 137
4.2. Sprawdzanie pogody z u�yciem w�asnych URI ...................................................................... 1384.2.1. Oferowanie w�asnych URI ................................................................................................ 1384.2.2. U�ycie niestandardowego URI ......................................................................................... 140
4.3. Sprawdzanie pogody za pomoc� obiektu BroadcastReceiver ............................................... 1424.3.1. Rozg�aszanie intencji ......................................................................................................... 1424.3.2. Tworzenie odbiornika ....................................................................................................... 143
4.4. Budowanie us�ugi prognozy pogody ........................................................................................ 1444.5. Komunikacja WeatherAlertService z innymi aplikacjami .................................................... 148
4.5.1. J�zyk definicji interfejsu ................................................................................................... 1484.5.2. Binder oraz Parcelable ...................................................................................................... 1504.5.3. Udost�pnianie zdalnego interfejsu ................................................................................... 1514.5.4. �czenie z us�ug� .............................................................................................................. 1524.5.5. Uruchamianie i do��czanie us�ugi .................................................................................... 1554.5.6. Cykl �ycia us�ugi ................................................................................................................ 156
4.6. Podsumowanie ............................................................................................................................ 157
5. Zapisywanie i odczytywanie danych 1595.1. U�ycie w�a�ciwo�ci ..................................................................................................................... 160
5.1.1. Wykorzystanie obiektu SharedPreferences ..................................................................... 1605.1.2. Uprawnienia dost�pu do w�a�ciwo�ci .............................................................................. 163
5.2. U�ycie systemu plików ............................................................................................................... 1665.2.1. Tworzenie plików .............................................................................................................. 1665.2.2. Odczyt z plików ................................................................................................................. 1675.2.3. Pliki jako surowe zasoby ................................................................................................... 1685.2.4. Zasoby plików XML .......................................................................................................... 1695.2.5. Zapis na karcie SD ............................................................................................................. 171
5.3. Zapisywanie danych w bazie danych ....................................................................................... 1745.3.1. Budowanie i wykorzystanie bazy danych ......................................................................... 1755.3.2. Wykorzystanie programu sqlite3 ...................................................................................... 179
5.4. U�ycie klas ContentProvider .................................................................................................... 1805.4.1. U�ycie istniej�cej klasy ContentProvider ........................................................................ 1815.4.2. Tworzenie dostawcy tre�ci ................................................................................................ 182
5.5. Podsumowanie ............................................................................................................................ 188
6. Sieci oraz us�ugi sieciowe 1896.1. Przegl�d zagadnie sieciowych ................................................................................................ 191
6.1.1. Podstawy sieci .................................................................................................................... 1916.1.2. Serwery i klienty ................................................................................................................ 194
6.2. Sprawdzanie stanu sieci ............................................................................................................ 1956.3. Komunikacja poprzez gniazdo serwera ................................................................................... 1966.4. Wykorzystanie HTTP ................................................................................................................ 199
6.4.1. Proste ��dania HTTP i java.net ........................................................................................ 1996.4.2. Zaawansowana obs�uga HTTP za pomoc� HttpClient .................................................... 2016.4.3. Tworzenie klasy pomocniczej dla wywo�a� HTTP i HTTPS ......................................... 203
6 Spis tre�ci
6.5. Us�ugi sieciowe ........................................................................................................................... 2096.5.1. POX — po��czenie HTTP i XML .................................................................................... 2096.5.2. REST .................................................................................................................................. 2116.5.3. SOAP czy nie SOAP — oto jest pytanie .......................................................................... 215
6.6. Podsumowanie ............................................................................................................................ 216
7. Telefonia 2177.1. Przegl�d podstawowych zagadnie zwi�zanych z telefoni� .................................................. 218
7.1.1. Poznajemy GSM ................................................................................................................ 2197.1.2. Poznajemy CDMA ............................................................................................................ 220
7.2. Dost�p do danych telefonii ....................................................................................................... 2217.2.1. Odczyt w�a�ciwo�ci telefonu ............................................................................................. 2227.2.2. Pozyskiwanie informacji o stanie telefonu ....................................................................... 224
7.3. Interakcja z telefonem ............................................................................................................... 2267.3.1. U�ycie intencji do nawi�zywania po��cze� ...................................................................... 2267.3.2. U�ycie narz�dzi zwi�zanych z numerami telefonicznymi ............................................... 2277.3.3. Przechwytywanie po��cze� wychodz�cych ...................................................................... 229
7.4. Obs�uga wiadomo�ci — SMS .................................................................................................... 2307.4.1. Wysy�anie wiadomo�ci SMS ............................................................................................. 2317.4.2. Odbieranie wiadomo�ci SMS ........................................................................................... 233
7.5. Podsumowanie ............................................................................................................................ 235
8. Powiadomienia i alarmy 2378.1. Korzystanie z Toast .................................................................................................................... 238
8.1.1. Tworzenie aplikacji SMS korzystaj�cej z klasy Toast ...................................................... 2388.1.2. Odbieranie wiadomo�ci SMS ........................................................................................... 239
8.2. Wprowadzenie do powiadomie .............................................................................................. 2428.2.1. Klasa Notification .............................................................................................................. 2438.2.2. Powiadamianie u�ytkownika o wiadomo�ci SMS ............................................................ 244
8.3. Wprowadzenie do alarmów ...................................................................................................... 2478.3.1. Przyk�ad u�ycia alarmu ..................................................................................................... 2488.3.2. U�ycie powiadomie� z alarmami ...................................................................................... 252
8.4. Podsumowanie ............................................................................................................................ 253
9. Grafika i animacja 2559.1. Rysowanie grafiki w systemie Android .................................................................................... 256
9.1.1. Rysowanie przy u�yciu XML ............................................................................................ 2579.1.2. Przegl�d figur rysowanych za pomoc� XML ................................................................... 259
9.2. Tworzenie animacji za pomoc� API graficznego .................................................................... 2619.2.1. Animacja poklatkowa w Androidzie ................................................................................. 2619.2.2. Programowe tworzenie animacji ...................................................................................... 263
9.3. Wprowadzenie do OpenGL dla systemów wbudowanych .................................................... 2679.3.1. Tworzenie kontekstu OpenGL ......................................................................................... 2689.3.2. Rysowanie prostok�ta za pomoc� OpenGL ES ............................................................... 2729.3.3. Tworzenie trójwymiarowych kszta�tów i powierzchni za pomoc� OpenGL ES ........... 275
9.4. Podsumowanie ............................................................................................................................ 279
10. Multimedia 28110.1. Wprowadzenie do multimediów oraz OpenCORE ................................................................ 28210.2. Odtwarzanie d�wi�ków ............................................................................................................. 28310.3. Odtwarzanie wideo .................................................................................................................... 285
Spis tre�ci 7
10.4. Przechwytywanie mediów ......................................................................................................... 28710.4.1. Obs�uga kamery ............................................................................................................... 28710.4.2. Zapisywanie d�wi�ku ...................................................................................................... 292
10.5. Zapisywanie wideo ..................................................................................................................... 29510.6. Podsumowanie ............................................................................................................................ 301
11. Lokalizacja 30311.1. Symulowanie po�o�enia w emulatorze ..................................................................................... 305
11.1.1. Wysy�anie wspó�rz�dnych z perspektywy DDMS ........................................................ 30511.1.2. Format GPS Exchange .................................................................................................... 30711.1.3. Keyhole Markup Language z Google Earth .................................................................. 309
11.2. U�ycie klas LocationManager i LocationProvider ................................................................. 31111.2.1. Dost�p do danych lokalizacji za pomoc� LocationManager ......................................... 31211.2.2. U�ycie klasy LocationProvider ....................................................................................... 31411.2.3. Odbieranie informacji o lokalizacji za pomoc� klasy LocationListener ....................... 315
11.3. Korzystanie z map ...................................................................................................................... 31811.3.1. Dziedziczenie po MapActivity ....................................................................................... 31811.3.2. U�ycie MapView ............................................................................................................. 31911.3.3. Umieszczanie danych na mapie za pomoc� Overlay ..................................................... 322
11.4. Zamiana miejsc na adresy za pomoc� klasy Geocoder .......................................................... 32511.5. Podsumowanie ............................................................................................................................ 327
Cz��� III. Aplikacje dla systemu Android 32912. Aplikacja wspomagaj�ca serwisantów 331
12.1. Projektowanie rzeczywistej aplikacji Android ........................................................................ 33312.1.1. Podstawowe wymagania aplikacji ................................................................................... 33312.1.2. Zarz�dzanie danymi ......................................................................................................... 33412.1.3. Architektura aplikacji i integracji ................................................................................... 335
12.2. Okre�lanie przebiegów w aplikacji .......................................................................................... 33612.2.1. Okre�lanie procesów w aplikacji .................................................................................... 33712.2.2. Lista plików �ród�owych ................................................................................................. 33812.2.3. Plik AndroidManifest.xml aplikacji serwisanta mobilnego ........................................... 340
12.3. Kod �ród�owy aplikacji .............................................................................................................. 34112.3.1. Aktywno� Splash ............................................................................................................ 34112.3.2. W�a�ciwo�ci u�ywane przez aktywno� FieldService ................................................... 34312.3.3. Implementacja aktywno�ci FieldService ....................................................................... 34412.3.4. Ustawienia ........................................................................................................................ 34612.3.5. Zarz�dzanie danymi zlece� ............................................................................................. 348
12.4. Kod �ród�owy dla zarz�dzania zleceniami .............................................................................. 35512.4.1. Aktywno� RefreshJobs ................................................................................................... 35512.4.2. Zarz�dzanie zleceniami — aktywno� ManageJobs ...................................................... 35912.4.3. Obs�uga zlecenia w aktywno�ci ShowJob ...................................................................... 36212.4.4. Przechwytywanie podpisu w aktywno�ci CloseJob ....................................................... 366
12.5. Kod serwera ................................................................................................................................ 37212.5.1. Interfejs u�ytkownika dyspozytora ................................................................................. 37212.5.2. Baza danych ..................................................................................................................... 37312.5.3. Kod PHP aplikacji dyspozytora ...................................................................................... 37412.5.4. Kod PHP do integracji z aplikacj� mobiln� ................................................................... 375
12.6. Podsumowanie ............................................................................................................................ 376
8 Spis tre�ci
13. Budowanie aplikacji Android w j�zyku C 37713.1. Budowanie aplikacji Android bez SDK ................................................................................... 378
13.1.1. Kompilator i linker j�zyka C ........................................................................................... 37913.1.2. Budowanie aplikacji Witaj, �wiecie ................................................................................ 38013.1.3. Instalowanie i uruchamianie aplikacji ............................................................................ 38113.1.4. Skrypt buduj�cy aplikacj� w j�zyku C ........................................................................... 383
13.2. Rozwi�zywanie problemu z ��czeniem dynamicznym ........................................................... 38413.2.1. Biblioteki systemu Android ............................................................................................ 38413.2.2. Budowanie aplikacji ��czonej dynamicznie ................................................................... 38613.2.3. exit() oraz return() ............................................................................................................ 38913.2.4. Kod uruchamiaj�cy .......................................................................................................... 390
13.3. Która godzina? Serwer DayTime ............................................................................................. 39213.3.1. Aplikacja serwera DayTime ............................................................................................ 39213.3.2. Plik daytime.c .................................................................................................................. 39313.3.3. Baza danych SQLite ........................................................................................................ 39513.3.4. Budowanie i uruchamianie serwera DayTime .............................................................. 397
13.4. Klient DayTime .......................................................................................................................... 39913.4.1. Aktywno� ........................................................................................................................ 39913.4.2. Klient DayTime ............................................................................................................... 40113.4.3. Testowanie klienta DayTime .......................................................................................... 402
13.5. Podsumowanie ............................................................................................................................ 402
Cz��� IV. Dojrzewaj�ca platforma 405
14. Bluetooth i sensory 40714.1. Przegl�d mo�liwo�ci Bluetooth w systemie Android .............................................................. 409
14.1.1. Zast�powanie kabli .......................................................................................................... 40914.1.2. Rola podstawowa i podrz�dna oraz gniazda .................................................................. 41014.1.3. Urz�dzenia zaufane ......................................................................................................... 41114.1.4. Pod��czanie si� do zdalnego urz�dzenia ........................................................................ 41314.1.5. Przechwytywanie zdarze� Bluetooth ............................................................................. 41414.1.6. Uprawnienia Bluetooth ................................................................................................... 416
14.2. Interakcja z obiektem SensorManager .................................................................................... 41614.2.1. Typy czujników ................................................................................................................ 41714.2.2. Odczyt warto�ci czujnika ................................................................................................ 41814.2.3. W��czanie i wy��czanie czujników ................................................................................. 419
14.3. Budowanie aplikacji SenseBot .................................................................................................. 42014.3.1. Interfejs u�ytkownika ...................................................................................................... 42014.3.2. Interpretowanie warto�ci czujnika ................................................................................. 42314.3.3. Jazda robotem .................................................................................................................. 42414.3.4. Komunikacja z robotem .................................................................................................. 425
14.4. Podsumowanie ............................................................................................................................ 426
15. Integracja 42915.1. Poznajemy model kontaktów Androida ................................................................................... 430
15.1.1. Wybór otwartych rekordów ............................................................................................ 43115.1.2. Obs�uga wielu kont .......................................................................................................... 43315.1.3. Unifikowanie widoku lokalnego z ró�nych zdalnych magazynów ................................ 43415.1.4. Wspólny plac zabaw ........................................................................................................ 436
15.2. Zaczynamy korzysta� z LinkedIn ............................................................................................. 436
Spis tre�ci 9
15.3. Zarz�dzanie kontaktami ............................................................................................................ 43815.3.1. Wykorzystanie wbudowanej aplikacji kontaktów .......................................................... 43815.3.2. ��danie wykonania operacji z naszej aplikacji ............................................................... 44115.3.3. Bezpo�redni odczyt i modyfikowanie bazy danych kontaktów ..................................... 44315.3.4. Dodawanie kontaktów ..................................................................................................... 444
15.4. ��czenie wszystkiego ................................................................................................................. 44615.4.1. Marzenia o synchronizacji .............................................................................................. 44615.4.2. Definiowanie kont ........................................................................................................... 44715.4.3. Us�uga AccountManager ................................................................................................. 449
15.5. Tworzenie konta LinkedIn ........................................................................................................ 45015.5.1. Brak obs�ugi urz�dze� mobilnych .................................................................................. 45015.5.2. Uwierzytelnianie w LinkedIn ......................................................................................... 450
15.6. Synchronizacja w tle z u�yciem SyncAdapter ......................................................................... 45815.6.1. Cykl �ycia synchronizacji ................................................................................................ 45815.6.2. Synchronizowanie danych LinkedIn .............................................................................. 458
15.7. Koczymy — LinkedIn w akcji ................................................................................................ 46115.7.1. Ko�czenie projektu LinkedIn ......................................................................................... 46115.7.2. Rozwi�zywanie problemów ............................................................................................ 46215.7.3. Kontynuacja ..................................................................................................................... 463
15.8. Podsumowanie ............................................................................................................................ 464
16. Tworzenie stron WWW dla systemu Android 46516.1. Czym jest programowanie WWW dla Androida .................................................................... 466
16.1.1. Wprowadzenie do WebKit ............................................................................................. 46716.1.2. Analiza opcji architektury ............................................................................................... 467
16.2. Optymalizacja aplikacji WWW dla Androida ........................................................................ 46816.2.1. Projektowanie z zachowaniem mobilno�ci stron ........................................................... 46916.2.2. Dodawanie znacznika viewport ...................................................................................... 47016.2.3. Selektywne �adowanie tre�ci ........................................................................................... 47216.2.4. Analiza parametru user agent ......................................................................................... 47316.2.5. Zapytanie media .............................................................................................................. 47416.2.6. Aplikacja tylko dla urz�dze� mobilnych ......................................................................... 476
16.3. Przechowywanie danych w przegl�darce ................................................................................ 47716.3.1. Konfiguracja ..................................................................................................................... 47716.3.2. Analiza kodu ..................................................................................................................... 47916.3.3. Interfejs u�ytkownika ...................................................................................................... 48016.3.4. Otwieranie bazy danych .................................................................................................. 48116.3.5. Analiza funkcji transaction() ............................................................................................ 48216.3.6. Wstawianie i usuwanie wierszy ...................................................................................... 48416.3.7. Testowanie aplikacji za pomoc� narz�dzi WebKit ........................................................ 485
16.4. Budowanie aplikacji hybrydowej ............................................................................................. 48616.4.1. Poznajemy kontrolk� przegl�darki ................................................................................. 48716.4.2. Konfigurowanie kontrolki ............................................................................................... 48716.4.3. Implementowanie obiektu obs�ugi JavaScript ............................................................... 48916.4.4. U�ycie kodu z JavaScript ................................................................................................ 49116.4.5. Spotkanie z JavaScript ..................................................................................................... 49216.4.6. Przede wszystkim bezpiecze�stwo ................................................................................. 49416.4.7. Implementacja WebViewClient ..................................................................................... 49616.4.8. Rozszerzanie przegl�darki .............................................................................................. 49616.4.9. Wykrywanie zdarze� nawigacyjnych ............................................................................. 49716.4.10. Implementacja klasy WebChromeClient ..................................................................... 500
16.5. Podsumowanie ............................................................................................................................ 501
10 Spis tre�ci
17. Wid�ety aplikacji 50317.1. Wprowadzenie do wid�etów aplikacji ..................................................................................... 504
17.1.1. Co to jest wid�et aplikacji? ............................................................................................. 50417.1.2. Strategie instalowania wid�etów .................................................................................... 507
17.2. Wprowadzenie do aplikacji SiteMonitor ................................................................................. 50917.2.1. Korzy�ci z aplikacji SiteMonitor ..................................................................................... 50917.2.2. Interfejs u�ytkownika ...................................................................................................... 509
17.3. Architektura aplikacji SiteMonitor .......................................................................................... 51317.3.1. Schemat projektu aplikacji .............................................................................................. 51317.3.2. Plik po pliku ..................................................................................................................... 515
17.4. Obs�uga danych w wid�etach .................................................................................................... 51517.5. Implementacja klasy AppWidgetProvider .............................................................................. 519
17.5.1. Katalog metod klasy AppWidgetProvider ...................................................................... 52017.5.2. Implementowanie klasy SiteMonitorWidgetImpl ......................................................... 52017.5.3. Obs�uga wid�etów zombie .............................................................................................. 523
17.6. Wy�wietlanie wid�etów za pomoc� RemoteViews ................................................................. 52417.6.1. Korzystanie z RemoteViews ........................................................................................... 52417.6.2. Metoda UpdateOneWidget() .......................................................................................... 525
17.7. Konfigurowanie instancji wid�etu ............................................................................................ 52717.7.1. Metadane wid�etu ........................................................................................................... 52717.7.2. Operacje na danych intencji ........................................................................................... 52817.7.3. Potwierdzenie utworzenia wid�etu ................................................................................ 529
17.8. Aktualizacja wid�etu .................................................................................................................. 53117.8.1. Porównanie us�ugi z alarmem ......................................................................................... 53117.8.2. Uruchamianie aktualizacji ............................................................................................... 53217.8.3. Aktualizowanie wid�etów ................................................................................................ 534
17.9. ��czenie wszystkich elementów w pliku AndroidManifest.xml ........................................... 53817.10. Podsumowanie ............................................................................................................................ 539
18. Lokalizowanie aplikacji 54118.1. Potrzeba lokalizowania .............................................................................................................. 54218.2. Ustawienia regionalne ............................................................................................................... 54318.3. Strategie lokalizowania aplikacji .............................................................................................. 545
18.3.1. Identyfikowanie docelowych j�zyków i danych ............................................................ 54518.3.2. Identyfikowanie tekstów i zarz�dzanie nimi .................................................................. 54618.3.3. Rysunki i uk�ady .............................................................................................................. 54818.3.4. Data, czas, liczby i waluty ............................................................................................... 54918.3.5. Praca z zespo�em t�umaczy ............................................................................................. 550
18.4. Wykorzystanie mo�liwo�ci zasobów Androida ....................................................................... 55018.4.1. Wi�cej ni� ustawienia regionalne ................................................................................... 55118.4.2. Przypisywanie tekstów z zasobów .................................................................................. 551
18.5. Lokalizowanie kodu Java ........................................................................................................... 55318.6. Formatowanie lokalizowanych napisów .................................................................................. 55418.7. Problemy z lokalizowaniem ....................................................................................................... 55618.8. Podsumowanie ............................................................................................................................ 557
19. Android Native Development Kit 55919.1. Wprowadzenie do NDK ............................................................................................................ 560
19.1.1. Zastosowania NDK .......................................................................................................... 56119.1.2. Przegl�d NDK ................................................................................................................. 561
Spis tre�ci 11
19.2. Budowanie aplikacji za pomoc� NDK ..................................................................................... 56319.2.1. Demonstracja gotowej aplikacji ...................................................................................... 56319.2.2. Struktura projektu ........................................................................................................... 565
19.3. Budowanie biblioteki JNI .......................................................................................................... 56519.3.1. Poznajemy JNI ................................................................................................................. 56619.3.2. Implementacja biblioteki ................................................................................................ 56719.3.3. Kompilowanie biblioteki JNI .......................................................................................... 571
19.4. Budowanie interfejsu u�ytkownika .......................................................................................... 57219.4.1. Uk�ad interfejsu u�ytkownika ......................................................................................... 57219.4.2. Wykonanie zdj�cia .......................................................................................................... 57419.4.3. Wyszukiwanie kraw�dzi .................................................................................................. 576
19.5. Integracja NDK w Eclipse ........................................................................................................ 57719.6. Podsumowanie ............................................................................................................................ 578
Cz��� V. Dodatki 581A. Instalowanie Android SDK 583
A.1. Wymagania �rodowiska programistycznego ............................................................................ 584A.2. Pobieranie i instalowanie Eclipse ............................................................................................. 584A.3. Pobieranie i instalowanie Android SDK .................................................................................. 587A.4. Korzystanie z SDK oraz AVD Manager ................................................................................... 587A.5. Pobieranie i instalowanie wtyczki Eclipse ............................................................................... 590A.6. Konfigurowanie wtyczki Eclipse ............................................................................................... 592
B. Publikowanie aplikacji 595B.1. Przygotowanie aplikacji do dystrybucji.................................................................................... 596
B.1.1. Rejestrowanie..................................................................................................................... 596B.1.2. Powiadomienia debugowania............................................................................................ 596B.1.3. Przyk�adowe dane.............................................................................................................. 596B.1.4. Plik AndroidManifest.xml ................................................................................................. 597B.1.5. Licencja u�ytkownika ........................................................................................................ 597B.1.6. Testowanie ......................................................................................................................... 598B.1.7. Operacje ko�cowe ............................................................................................................. 598
B.2. Podpisywanie cyfrowe aplikacji ................................................................................................ 599B.2.1. Magazyny kluczy................................................................................................................ 599B.2.2. keytool ................................................................................................................................ 599B.2.3. jarsigner.............................................................................................................................. 600
B.3. Publikowanie w Android Market .............................................................................................. 602B.3.1. Zasady Android Market ..................................................................................................... 602B.3.2. Umieszczanie aplikacji w Android Market....................................................................... 603B.3.3. Android Market — w�a�ciwe rozwi�zanie........................................................................ 603
B.4. Inne sposoby dystrybucji............................................................................................................ 604B.5. Podsumowanie Android Debug Bridge .................................................................................... 606
Skorowidz 609
Bluetooth i sensory
W tym rozdziale:
� Do��czanie Bluetooth do urz�dzenia� Interakcja z obiektem SensorManager� Budowanie i uruchamianie aplikacji
SenseBot
408 ROZDZIA� 14Bluetooth i sensory
Wi�kszo� materia�u przedstawionego w tej ksi��ce dotyczy wykorzystania ró�nychmo�liwo�ci Android SDK. Teraz jednak poka�emy, jak skorzysta z mo�liwo�ci sprz�-towych urz�dze� Android. Zapoznamy si� tu z pod��czaniem urz�dzenia Android dozdalnych urz�dze� za pomoc� po��czenia bezprzewodowego Bluetooth oraz odczytemi interpretacj� warto�ci ze sprz�towego czujnika orientacji urz�dzenia. W rozdziale tymte dwa tematy zwi�zane ze sprz�tem po��czyli�my w jednym przyk�adowym programie,który pozwala sterowa robotem zbudowanym przy u�yciu popularnego zestawu LEGOMindstorms NXT. Robot Mindstorm NXT obs�uguje protokó� komunikacyjny znanypod nazw� „Direct Commands1”, co pozwala na sterowanie nim z u�yciem urz�dzeniazdalnego. Jest to rozdzia�, w którym konieczne jest u�ycie fizycznego urz�dzenia z zain-stalowanym systemem Android w wersji 2 lub nowszej — sam symulator nie jest wystar-czaj�cy do sprawdzania dzia�ania Bluetooth oraz sensorów.
Kod do��czony do tego rozdzia�u tworzy aplikacj� o nazwie SenseBot. Jest to �red-nio skomplikowany przyk�ad u�ycia systemu Android do manipulowania zewn�trznymiobiektami. Czujniki orientacji urz�dzenia Android pozwalaj� u�ytkownikowi „jecha”robotem, przechylaj�c telefon w okre�lonym kierunku, w sposób podobny do u�ywaniaNintendo Wii lub innego zaawansowanego systemu gier. Przechylamy telefon do przodu,a robot jedzie do przodu. Przechylamy telefon do ty�u, a robot zmienia kierunek. Prze-chylanie w lewo lub w prawo powoduje skr�t robota w odpowiednim kierunku. Pozinterpretowaniu warto�ci ka�dego czujnika ruchu aplikacja SenseBot wysy�a poleceniado robota poprzez Bluetooth, powoduj�c odpowiednie fizyczne dzia�anie. LEGO NXTma wbudowany zestaw polece� pozwalaj�cych na operacje niskiego poziomu, takie jakbezpo�rednie sterowanie silnikami. Ruchy urz�dzenia Android s� interpretowane,konwertowane na polecenia i przesy�ane za pomoc� Bluetooth do robota.
Oprócz podstaw komunikacji Bluetooth oraz zarz�dzania sensorami kod demon-struje u�ycie dynamicznie tworzonych obiektów BroadcastReceiver, które obs�uguj�zdarzenia zwi�zane z po��czeniem Bluetooth.
Temat komunikacji Bluetooth jest znacznie szerszy i nie mamy mo�liwo�ci opisago w ca�o�ci w jednym rozdziale. Na platformie Android dost�pnych jest co najmniejsze� ró�nych sensorów, a w tym rozdziale demonstrujemy u�ycie tylko jednego. Je�eliszukasz dok�adnego opisu tych dwóch tematów, zach�camy do odszukania dokumen-tacji w sieci lub by mo�e innej ksi��ki na ten temat. Celem tego rozdzia�u jest przed-stawienie funkcji Bluetooth oraz sensorów na platformie Android w kontek�cie dzia-�aj�cej (i zabawnej) aplikacji. Je�eli masz dost�p do robota LEGO Mindstorms NXTi zbudujesz t� aplikacj�, obiecujemy, �e na d�ugi czas nie b�dziesz si� móg� oderwa od„je�d�enia” robotem za pomoc� telefonu. Jedna z wersji tej aplikacji jest dost�pnado pobrania z Android Market.
1 Wi�cej informacji na temat Direct Commands dla Lego Mindstorm mo�na znale� pod adresem
http://mindstorms.lego.com/en-us/support/files/default.aspx.
14.1. Przegl�d mo�liwo�ci Bluetooth w systemie Android 409
14.1. Przegl�d mo�liwo�ci Bluetoothw systemie Android
Pierwszym urz�dzeniem, jakie przychodzi na my�l, gdy wspomina si� Bluetooth, jestbezprzewodowy zestaw s�uchawkowy. W wielu krajach te cude�ka technologii bez-przewodowej s� wymagane przez prawo w przypadku korzystania z telefonu w czasieprowadzenia samochodu. W rzeczywisto�ci zestawy s�uchawkowe to tylko jedno z wieluzastosowa� technologii Bluetooth.
Bluetooth to technologia komunikacji bezprzewodowej podobna do Wi-Fi, aleograniczona do komunikacji o niewielkim zasi�gu, oko�o 10 metrów. Oprócz zastosowa-nia w bezprzewodowych s�uchawkach i mikrofonie telefonu komórkowego Bluetoothpozwala równie� na realizacj� po��cze� sieciowych mi�dzy urz�dzeniami, wymian�obiektów, zast�powanie kabli oraz realizacj� zaawansowanych funkcji audiowizualnych.
Podobnie jak ka�dy inny standardowy protokó�, tak i Bluetooth posiada w�asny „stos”protoko�ów, z których ka�dy implementuje osobne mo�liwo�ci i funkcje protoko�u.W rozdziale tym nie b�dziemy traci czasu na prezentowanie tych warstw, poniewa� stosBluetooth jest opisany w innych miejscach. Zamiast tego w rozdziale tym poka�emymo�liwo�ci nawi�zania po��czenia danych pomi�dzy dwoma urz�dzeniami. B�dziemytu korzysta z „profilu” Bluetooth o nazwie RFCOMM2, b�d�cego profilem zast�po-wania kabla.
W tym podrozdziale poka�emy, jak nawi�za po��czenie pomi�dzy Androidema zdalnym urz�dzeniem, korzystaj�c z pakietu android.bluetooth. Poniewa� platformaAndroid pozwala tylko na po��czenia szyfrowane, dwa urz�dzenia komunikacyjne musz�by wcze�niej sparowane, a pó�niej mog� ��czy si� ze sob� bez konieczno�ci podawa-nia has�a. Aby wiedzie, czy aplikacja jest po��czona z urz�dzeniem Bluetooth, nale�ynast�pnie zarejestrowa dwa zdarzenia: ACTION_ACL_CONNECTED oraz ACTION_ACL_�DISCONNECTED. Dodatkowo aplikacja Android musi posiada uprawnienie BLUE-TOOTH zdefiniowane w pliku AndroidManifest.xml. Zaczynamy!
14.1.1. Zast�powanie kabli
Obecnie pod��czanie si� do internetu w celu sprawdzenia poczty lub przegl�dania sieciWWW jest codzienn� czynno�ci� wielu u�ytkowników systemu Android. Przy u�yciunaszego telefonu mo�emy po��czy si� z komputerami znajduj�cymi si� po drugiejstronie planety, ale jak komunikowa si� z czym�, co znajduje si� w tym samym pokoju?W niezbyt odleg�ej przesz�o�ci programowali�my interfejsy pomi�dzy komputeramipo��czonymi szeregowo kablem korzystaj�cym z interfejsu RS232. Po kilku krótkichlatach kable szeregowe RS232, zast�pione przez bardziej zaawansowane kable USBoraz przez profil Bluetooth Serial Port, sta�y si� eksponatem muzealnym.
Tak jak USB mo�e by u�ywane przez wiele ró�nych aplikacji, tak i protokó� bez-przewodowy Bluetooth mo�e by wykorzystywany na wiele sposobów. W tym momen-cie interesuje nas mo�liwo� u�ycia Bluetooth do zast�pienia kabla szeregowego zapomoc� profilu Serial Port Profile (SPP), nazywanego czasami RFCOMM. RF pochodzi
2 Wi�cej informacji na temat RFCOMM mo�na znale� na stronie http://www.bluetooth.com.
410 ROZDZIA� 14Bluetooth i sensory
od s�ów radio frequency, czyli cz�stotliwo�ci radiowych. COMM pochodzi od portukomunikacyjnego, czyli antycznego ju� po��czenia punkt-punkt, wykorzystuj�cegoprotokó� strumieniowy.
14.1.2. Rola podstawowa i podrz�dna oraz gniazda
Protokó� Bluetooth dzia�a w sposób podobny do innych �rodowisk komunikacyjnych,w których urz�dzenie podstawowe inicjuje komunikacj� z jednym lub wi�ksz� liczb�urz�dze� podrz�dnych. Android jest na tyle rozbudowany, �e mo�e by zarówno urz�-dzeniem podstawowym, jak i podrz�dnym w po��czeniu Bluetooth.
Niezale�nie od sposobu nawi�zania po��czenia — jako podstawowe lub drugorz�dneurz�dzenie Bluetooth — aplikacja Android wymienia dane poprzez interfejs gniazd.To prawda — znany ju� mechanizm sieciowy korzystaj�cy z gniazd oraz skojarzonychz nimi strumieni wej�ciowych i wyj�ciowych jest równie� stosowany przy po��czeniachBluetooth. Je�eli wi�c przejdziemy przez etap ��czenia ze sob� dwóch urz�dze� Bluetoothw celu utworzenia sesji komunikacyjnej, mo�emy mniej przejmowa si� szczegó�amikomunikacji i po prostu traktowa urz�dzenie jako aplikacj� po drugiej stronie gniazda.Jest to podobne do relacji pomi�dzy przegl�dark� WWW i zdalnym serwerem, którywymienia dane poprzez gniazda TCP.
Aby u�y �rodowiska Bluetooth w urz�dzeniu Android, musimy skorzysta z pakietuandroid.bluetooth, który zosta� dodany w wersji 2.0. Cho wi�kszo� urz�dze� Androidw wersji ni�szej ni� 2.0 mog�a korzysta z zestawów s�uchawkowych Bluetooth, to dopierood wersji 2.0 aplikacje Android mog�y wykorzystywa komunikacj� Bluetooth w sposóbprzedstawiony w tym rozdziale. W tabeli 14.1 pokazane s� g�ówne klasy Java u�ywanew aplikacjach Android korzystaj�cych z komunikacji Bluetooth.
Tabela 14.1. Klasy Bluetooth
Klasa Komentarz
BluetoothAdapter Klasa ta reprezentuje sprz�t lokalnego urz�dzenia Bluetooth w systemie Android i pozwalana tworzenie interfejsu. Wszystko zaczyna si� od BluetoothAdapter.
BluetoothClass Klasa BluetoothClass zapewnia wygodne metody dost�pu do sta�ych warto�ci zwi�zanychz komunikacj� i dzia�aniem Bluetooth.
BluetoothDevice Ka�de urz�dzenie zdalne jest reprezentowane jako BluetoothDevice.
BluetoothSocket Klasa BluetoothSocket jest u�ywana przy wymianie danych. Urz�dzenie podstawoweinicjuje po��czenie z gniazdem w urz�dzeniu podrz�dnym, tworz�c wcze�niej BluetoothSocket.W rozdziale tym przedstawione s� przyk�ady kodu demonstruj�ce t� technik�.
BluetoothServerSocket Urz�dzenie podrz�dne Bluetooth oczekuje po��cze� z urz�dzeniem nadrz�dnym za pomoc�BluetoothServerSocket w taki sam sposób, jak serwer WWW oczekuje na po��czenieprzez gniazdo TCP z przegl�darki. Po zestawieniu po��czenia tworzony jest obiektBluetoothSocket zapewniaj�cy dalsz� komunikacj�.
W rozdziale tym przedstawimy u�ycie klas BluetoothAdapter, BluetoothDevice orazBluetoothSocket. W nast�pnym punkcie poka�emy, w jaki sposób urz�dzenie Androidpod��cza si� do innego urz�dzenia Bluetooth.
14.1. Przegl�d mo�liwo�ci Bluetooth w systemie Android 411
Uwaga
W przedstawionych tu przyk�adach urz�dzenie Android jest podstawowym, a kon-troler LEGO Mindstorm NXT podrz�dnym urz�dzeniem Bluetooth.
14.1.3. Urz�dzenia zaufane
Cho specyfikacja Bluetooth pozwala na korzystanie zarówno z po��cze� szyfrowanych,jak i nieszyfrowanych, to jednak platforma Android pozwala wy��cznie na po��czeniaszyfrowane. W zasadzie oznacza to tylko, �e dwa komunikuj�ce si� z sob� urz�dzeniamusz� by wcze�niej sparowane lub zwi�zane. Jest to nieco irytuj�cy krok polegaj�cy napoinformowaniu ka�dego z urz�dze�, �e drugie jest urz�dzeniem zaufanym. Pomimok�opotliwo�ci tego procesu oraz faktu, �e niemal wszystkie urz�dzenia Bluetooth natej planecie korzystaj� z kodu zabezpiecze� 0000 lub 1234, jedynym zabezpieczeniemprotoko�u Bluetooth jest ten w�a�nie kod.
Urz�dzenia mog� by sparowane poprzez ich ekrany „ustawie�” lub podczas nawi�-zywania pierwszego po��czenia. W tym punkcie przedstawimy sposób parowaniaurz�dzenia Android3 z modu�em kontrolera robota LEGO.
Na rysunku 14.1 pokazana jest cz�� ekranu ustawie� Bluetooth z mojego telefonuNexus One z systemem Android 2.2.
Rysunek 14.1.Ekran ustawie�Bluetooth
Z tego ekranu mo�emy uzyska nast�puj�ce informacje:
� Bluetooth jest w��czony.� Urz�dzenie ma nazw� Nexus One.� Urz�dzenie to nie jest obecnie wykrywalne. Oznacza to, �e inne urz�dzenia
Bluetooth nie widz� tego telefonu w czasie „skanowania”. Praktycznie rzecz bior�c,oznacza to, �e telefon ignoruje pakiety wykrywania. Znajduje si� tu równie�
3 Aby dowiedzie si� wi�cej na temat typów u�ywanych uk�adów w sprz�cie Android, warto skorzysta
z forum Talk Android, dost�pnego pod adresem http://www.talkandroid.com/android-forums/android-hardware/.
412 ROZDZIA� 14Bluetooth i sensory
przycisk pozwalaj�cy na zainicjowanie wykrywania znajduj�cych si� w pobli�uurz�dze�.
� Aby rozpocz� skanowanie znajduj�cych si� w zasi�gu urz�dze� Bluetooth, nale�yklikn� przycisk Wyszukaj urz�dzenia.
� W telefonie by�y równie� wcze�niej sparowane inne urz�dzenia, które nie s�obecnie po��czone:� NXT — robot LEGO.� Dwa urz�dzenia bezprzewodowe Samsung. To nie pomy�ka — mamy tu dwa
osobne urz�dzenia sparowane z telefonem. (Autor w ten sposób „rozwi�za�”problem cz�stego gubienia zestawów s�uchawkowych przez kupienie kilkusztuk poprzez eBay, st�d kilka sparowanych urz�dze�).
D�ugie klikni�cie jednego z tych urz�dze� Bluetooth na li�cie pozwala otworzyekran opcji z dodatkowymi operacjami, zale�nymi od urz�dzenia. Na przyk�ad wybraniejednego z urz�dze� Samsung powoduje otwarcie okna pokazanego na rysunku 14.2.
Rysunek 14.2.Opcjesparowanegourz�dzenia
Aby sparowa urz�dzenie, nale�y najpierw przeprowadzi skanowanie. Po dodaniuurz�dzenia do listy mo�emy je wybra i zainicjowa parowanie. Na rysunku 14.3 poka-zany jest kontroler robota LEGO, na którym pokazane jest ��danie PIN w czasieparowania.
Rysunek 14.3.Kontroler LEGO��daj�cy podaniakodu PIN
Podany PIN jest porównywany z kodem wprowadzonym w telefonie, co jest pokazanena rysunku 14.4.
14.1. Przegl�d mo�liwo�ci Bluetooth w systemie Android 413
Rysunek 14.4.Parowaniez robotem LEGO
W tym momencie nasz telefon i kontroler robota LEGO s� sparowane. Od tegomomentu b�dziemy w stanie pod��cza si� do tego urz�dzenia bez ��dania podaniakodu PIN.
14.1.4. Pod��czanie si� do zdalnego urz�dzenia
Pod��czanie si� do sparowanego urz�dzenia wymaga wykonania dwóch kroków:
� Pobrania listy sparowanych urz�dze� za pomoc� stosu sprz�towo-programowegoBluetooth.
� Zainicjowania po��czenia RFCOMM z urz�dzeniem docelowym. Na poni�szymlistingu pokazany jest sposób nawi�zywania po��czenia RFCOMM lub SerialPort Profile pomi�dzy dwoma sparowanymi urz�dzeniami.
Listing 14.1. Inicjowanie po��czenia z urz�dzeniem Bluetooth
public void findRobot(View v){ try { btInterface = BluetoothAdapter.getDefaultAdapter(); pairedDevices = btInterface.getBondedDevices(); Iterator<BluetoothDevice> it = pairedDevices.iterator(); while (it.hasNext()) { BluetoothDevice bd = it.next(); if (bd.getName().equalsIgnoreCase(ROBOTNAME)) { connectToRobot(bd); return; } } } catch (Exception e) { Log.e(tag,"B��d w findRobot() " + e.getMessage()); }}
414 ROZDZIA� 14Bluetooth i sensory
private void connectToRobot(BluetoothDevice bd){ try { socket = bd.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); socket.connect(); } catch (Exception e) { Log.e(tag,"B��d komunikacji ze zdalnym urz�dzeniem [" + e.getMessage() + "]"); }}
Wszystkie operacje zwi�zane z Bluetooth4 zaczynaj� si� od BluetoothAdapter .Przy u�yciu referencji do adaptera mo�na uzyska list� sparowanych urz�dze� . Nast�p-nie przegl�damy list� , szukaj�c nazwy urz�dzenia odpowiadaj�cej nazwie robota.Nazwa ta mo�e by wpisana na sta�e, jak jest to zrealizowane w przyk�adowej aplikacji,wprowadzana przez u�ytkownika w czasie uruchamiania lub nawet wybierana z bardziejzaawansowanej listy urz�dze�. Niezale�nie od metody naszym celem jest zidentyfiko-wanie obiektu BluetoothDevice, a nast�pnie zainicjowanie po��czenia, jak jest to poka-zane w wywo�aniu funkcji o nazwie connectToRobot() . Dobr� praktyk� jest prze-chwytywanie wyj�tków , szczególnie je�eli korzystamy ze zdalnego urz�dzeniafizycznego, które mo�e wyj� z zasi�gu lub mo�e mie problemy z zasilaniem. Abypod��czy si� do zdalnego urz�dzenia za pomoc� profilu Serial Port Profile, nale�y u�ymetody createRfComSocketToServiceRecord() z klasy BluetoothDevice. Ci�g UUIDpokazany w kodzie jest identyfikatorem profilu Serial Port Profile . Gdy mamy dost�pnyobiekt BluetoothSocket, mo�na wywo�a metod� connect() .
W tym momencie mamy odnalezione interesuj�ce nas urz�dzenie i próbujemy wys�a��danie po��czenia. Czy to si� uda�o? Jak mo�emy to sprawdzi? Mo�na poczyni za�o-�enie na temat stanu urz�dzenia i ewentualnie czeka na b��d. Nie jest to jednak naj-lepsze podej�cie. Musi istnie inna metoda — faktycznie jest taka metoda, ale wymagawykorzystania obiektów Intent.
14.1.5. Przechwytywanie zdarze Bluetooth
Aby sprawdzi, czy aplikacja jest prawid�owo pod��czona do BluetoothDevice, nale�yzarejestrowa dwa zdarzenia zwi�zane z Bluetooth: ACTION_ACL_CONNECTED oraz ACTION_�ACL_DISCONNECTED. Gdy wyst�pi� te dwa zdarzenia, mo�emy by pewni, �e mamyprawid�owe po��czenie lub je utracili�my. W jaki sposób mo�na u�y tych zdarze�w po��czeniu z utworzonym wcze�niej gniazdem? Na poni�szym listingu pokazana jesttechnika polegaj�ca na tworzeniu obiektów BroadcastReceiver bezpo�rednio w aktyw-no�ci i rejestrowaniu w nich interesuj�cych nas zdarze�.
4 Wi�cej informacji mo�na znale� w dokumentacji Google na temat Bluetooth oraz Android dost�pnej
pod adresem http://developer.android.com/guide/topics/wireless/bluetooth.html.
14.1. Przegl�d mo�liwo�ci Bluetooth w systemie Android 415
Listing 14.2. Monitorowanie po��czenia Bluetooth
private BroadcastReceiver btMonitor = null;private void setupBTMonitor() { btMonitor = new BroadcastReceiver() { @Override public void onReceive(Context context,Intent intent) { if (intent.getAction().equals("android.bluetooth.device.action.ACL_CONNECTED")) { handleConnected(); } if (intent.getAction().equals("android.bluetooth.device.action.ACL_DISCONNECTED")) { handleDisconnected(); } } };}
Aby monitorowa specyficzne rozg�aszane zdarzenia, nale�y u�y obiektu Broadcast�Receiver. Zwykle realizuje si� to przy u�yciu osobnej klasy, ale aplikacja ta wymagabli�szej integracji z interfejsem u�ytkownika, wi�c zastosowali�my alternatywne podej-�cie. Zwykle obiekty BroadcastReceiver s� definiowane w pliku AndroidManifest.xml,ale w tym przypadku chcemy otrzymywa powiadomienia w okre�lonych przypadkach.W kodzie tym zdefiniowany jest obiekt BroadcastReceiver o nazwie btMonitor . W meto-dzie onCreate() wywo�ywana jest metoda setupBTMonitor() , w której tworzony jestobiekt BroadcastReceiver zawieraj�cy implementacj� metody onReceive() . Zaka�dym razem, gdy dla tego obiektu BroadcastReceiver dost�pny jest rozg�aszany obiektIntent, wywo�ywana jest metoda onReceive(). W implementacji tej obs�ugujemy akcjepod��czenia i roz��czenia urz�dzenia Bluetooth. Gdy urz�dzenie jest pod��czone, wywo-�ywana jest metoda handleConnected() . Podobnie gdy zdalne urz�dzenie zostanieroz��czone, wywo�ywana jest metoda handleDisconnected() , której zadaniem jestwykonanie operacji porz�dkowych.
Gdy urz�dzenie jest pod��czone, musimy wykona kilka operacji przygotowawczych,takich jak skonfigurowanie strumienia wej�ciowego oraz wyj�ciowego dla gniazda. Nanast�pnym listingu przedstawiona jest skrócona wersja metody handleConnected()zawieraj�ca kod pozwalaj�cy obs�ugiwa Bluetooth.
Listing 14.3. Metoda handleConnected
private void handleConnected() { try { is =socket.getInputStream(); os = socket.getOutputStream(); bConnected = true; btnConnect.setVisibility(View.GONE); btnDisconnect.setVisibility(View.VISIBLE); } catch (Exception e) { is = null; os = null; disconnectFromRobot(null); }}
416 ROZDZIA� 14Bluetooth i sensory
Gdy wywo�ana zostaje metoda handleConnection(), zestawione jest prawid�owe po��-czenie gniazd Bluetooth, wi�c musimy tylko utworzy strumienie wej�cia i wyj�cia .Po utworzeniu tych strumieni mo�e rozpocz� si� komunikacja pomi�dzy urz�dzeniemAndroid a robotem LEGO. Jak si� oka�e w dalszej cz��ci tego rozdzia�u, chcemy prze-twarza zdarzenia czujnika wy��cznie przy dzia�aj�cym po��czeniu z robotem, wi�custawiamy znacznik informuj�cy aplikacj� o stanie po��czenia. W procedurze tejprze��czamy równie� widoczno� dwóch przycisków — jednego u�ywanego do ��cze-nia z robotem oraz drugiego pozwalaj�cego zako�czy po��czenie. W przypadku wyst�-pienia b��du w czasie wykonywania tych operacji musimy zamkn� strumienie i zainicjowa ��danie roz��czenia .
Kod pozwalaj�cy na roz��czenie gniazda jest bardzo prosty:
socket.close();
Aby mo�na by�o wykona wi�kszo� operacji Bluetooth w systemie Android, nienale�y zapomina o jeszcze jednym wa�nym elemencie: uprawnieniach!
14.1.6. Uprawnienia Bluetooth
Korzystanie ze sparowanych urz�dze� to nie jedyna czynno�, do której wykonaniakonieczne s� uprawnienia. Aby korzysta z Bluetooth API, aplikacja Android musi posia-da uprawnienie BLUETOOTH w pliku AndroidManifest.xml:
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
Cz�� kodu odpowiedzialnego za komunikacj� Bluetooth jest przedstawiona w trze-cim podrozdziale, w którym przedstawiamy dok�adniej kod aplikacji SenseBot. Zanimzajmiemy si� kodowaniem i uruchamianiem aplikacji robota, przyjrzyjmy si� klasieSensorManager, dzi�ki której b�dziemy mogli wykorzysta czujniki Androida do stero-wania robotem.
14.2. Interakcja z obiektem SensorManager
Android udost�pnia odczyty z czujników poprzez klas� o nazwie SensorManager. KlasaSensorManager jest podobna do BluetoothAdapter, poniewa� wszystkie zwi�zane z ni�aktywno�ci intensywnie korzystaj� z SensorManager. Klasa SensorManager wchodziw sk�ad pakietu android.hardware. W tym podrozdziale poka�emy, jak odczytywa infor-macje z sensora orientacji, co b�dzie nam potrzebne w aplikacji SenseBot.
W tabeli 14.2 wymienione s� g�ówne klasy skojarzone z SensorManager.Korzystanie z klasy SensorManager jest bardzo proste. Na pocz�tek nale�y odczyta
referencj� do obiektu tej klasy:
SensorManager sManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
14.2. Interakcja z obiektem SensorManager 417
Tabela 14.2. Klasy zwi�zane z sensorami
Klasa Komentarz
SensorManager Podstawowy interfejs do wszystkich zainstalowanych w urz�dzeniu sensorów.
Sensor Reprezentuje pojedynczy sensor.
SensorEvent Reprezentuje odczyt z sensora.
SensorEventListener Interfejs ten jest u�ywany do odbierania zdarze� SensorEvents niemal w czasierzeczywistym.
Po odczytaniu referencji mo�na u�y tej zmiennej w ca�ej aplikacji do realizowaniainterakcji z samymi sensorami. Na przyk�ad aplikacja SenseBot korzysta z czujnikaorientacji. Aby uzyska referencj� do obiektu tego czujnika, nale�y wywo�a z klasySensorManager metod� getDefaultSensor():
Sensor orientationSensor = sManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
W aplikacji tej korzystamy tylko z czujnika orientacji, ale Android oferuje znaczniewi�cej. Przyjrzyjmy si� li�cie czujników dost�pnych w systemie Android 2.2.
14.2.1. Typy czujników
Android obs�uguje typy czujników wymienione w tabeli 14.3.
Tabela 14.3. Czujniki systemu Android
Sensor.TYPE_ACCELEROMETER Mierzy przyspieszenie w trzech wymiarach.
Sensor.TYPE_GYROSCOPE �yroskop.
Sensor.TYPE_LIGHT Czujnik �wiat�a.
Sensor.TYPE_MAGNETIC_FIELD Kompas mierz�cy pole magnetyczne.
Sensor.TYPE_ORIENTATION Mierzy po�o�enie w trzech wymiarach.
Sensor.TYPE_PRESSURE Mierzy ci�nienie.
Sensor.TYPE_PROXIMITY Mierzy odleg�o�� telefonu od innego obiektu, na przyk�ad naszego ucha.
Sensor.TYPE_TEMPERATURE Mierzy temperatur� otoczenia.
Ka�dy z obiektów czujnika mo�e zawiera kilka przydatnych i interesuj�cych atry-butów, takich jak:
� nazwa czujnika,� zu�ycie pr�du — w mA,� rozdzielczo�,� maksymalny zakres,� dostawca,� wersja.
418 ROZDZIA� 14Bluetooth i sensory
Czujnik orientacji w telefonie Nexus One ma nast�puj�c� charakterystyk�:
� Nazwa: AK8973 Orientation Sensor� Pobór pr�du: 7,0 mA� Rozdzielczo�: 1,0 stopie�� Maksymalny zakres: 360 stopni
Teraz, gdy wiemy, jak uzyska dost�p do czujnika poprzez SensorManager, zajmijmysi� odczytem jego warto�ci.
14.2.2. Odczyt warto�ci czujnika
Warto�ci z czujników odczytujemy z u�yciem obiektu implementuj�cego interfejsSensorEventInterface. Do metody o nazwie onSensorChanged() wysy�ane s� obiektySensorEvent. Klasa SensorEvent zawiera cztery pola wymienione w tabeli 14.4.
Tabela 14.4. Pola klasy SensorEvent
Pole Komentarz
accuracy Pole typu ca�kowitego reprezentuj�ce dok�adno�� odczytu szacowan� przez czujnik.
Sensor Referencja do czujnika, który utworzy� ten obiekt SensorEvent.
timestamp Znacznik czasu z dok�adno�ci� nanosekundow�, informuj�cy o momencie utworzenia zdarzenia.Pole to mo�e by� przydatne przy korelowaniu wielu zdarze�.
values[3] Warto�ci z czujnika zapisane jako tablica liczb zmiennoprzecinkowych z trzema warto�ciami. Jednostkii dok�adno�� tych trzech warto�ci jest zale�na od czujnika.
Obiekt SensorEventListener otrzymuje zdarzenie za ka�dym razem, gdy zmieni si�warto� sensora. Na poni�szym listingu przedstawiona jest uproszczona wersja metodyonSensorChanged() z aplikacji SenseBot.
Listing 14.4. Uproszczona wersja metody onSensorChanged()
public void onSensorChanged(SensorEvent event) { try { if (bConnected == false) return; StringBuilder sb = new StringBuilder(); sb.append("[" + event.values[0] + "]"); sb.append("[" + event.values[1] + "]"); sb.append("[" + event.values[2] + "]");
readings.setText(sb.toString());
// przetworzenie tych danych z czujnika // updateMotors(); } catch (Exception e) { Log.e(tag,"B��d w onSensorChanged ::" + e.getMessage()); } }
14.2. Interakcja z obiektem SensorManager 419
Za ka�dym razem, gdy dost�pny jest obiekt SensorEvent , jest on przekazywany dometody onSensorChanded(). Pierwsz� operacj� w tym kodzie jest sprawdzenie, czy mamydzia�aj�ce po��czenie z robotem . Je�eli nie ma po��czenia, ignorujemy dane. Ka�daz trzech warto�ci jest odczytywana i formatowana do wy�wietlenia w polu TextView .Warto�ci s� interpretowane i odpowiednie instrukcje s� wysy�ane do kontrolera ste-ruj�cego silnikami robota . Kod odpowiedzialny za interpretacj� i interakcj� z robo-tem przedstawiono w dalszej cz��ci tego rozdzia�u.
Aplikacja musi zarejestrowa swój obiekt SensorEventListener, aby otrzymywa tepowiadomienia. W nast�pnym punkcie przedstawimy zalecany sposób wykonywaniaprocesu rejestracji.
14.2.3. W��czanie i wy��czanie czujników
Obiekt implementuj�cy interfejs SensorEventListener otrzymuje komunikaty wy��czniewtedy, gdy jest zarejestrowany. Klasa SensorManager zawiera dwie funkcje pozwalaj�ceaplikacji na rejestrowanie zdarze� czujnika. W kontek�cie aplikacji SenseBot interesujenas otrzymywanie zdarze� z czujnika po�o�enia wy��cznie wtedy, gdy urz�dzenie jestpo��czone z robotem poprzez Bluetooth. Dlatego kod rejestracji umie�cili�my w przed-stawionej wcze�niej metodzie handleConnected(). Na poni�szym listingu zamieszczonyjest nowy kod, dodany do metody handleConnected().
Listing 14.5. Kod rejestracji czujnika
sManager.registerListener(SenseBot.this, sManager.getDefaultSensor( Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_UI);
Metoda registerListener() z klasy SensorManager oczekuje trzech argumentówpotrzebnych do przekazania danych z czujnika do aplikacji. Pierwszym argumentem jestobiekt implementuj�cy interfejs SensorEventListener, którym w tym przypadku jest samaklasa SenseBot.this . Drugim argumentem jest obiekt interesuj�cego nas czujnika.W tym przypadku jeste�my zainteresowani �ledzeniem warto�ci z czujnika po�o�enia .Cz�stotliwo�, z jak� s� aktualizowane dane czujników, jest zmienna i definiowana przezprogramist� za pomoc� trzeciego parametru. W tym przypadku u�yli�my sta�ej Sensor�Manager.SENSOR_DELAY_UI , która jest dobr�, uniwersaln� warto�ci�. Dla gier i innychaplikacji czasu rzeczywistego nale�y u�y wi�kszych warto�ci.
Jak pami�tamy, czujnik po�o�enia potrzebuje 7 mA. Aby wyd�u�y czas pracybaterii, nale�y pami�ta o wy��czeniu czujnika, je�eli nie jest on potrzebny. W aplikacjiSenseBot istniej� dwa miejsca, w których ma to miejsce. Pierwszym jest metoda handle�Disconnected() — gdy utracimy po��czenie z robotem, nie ma sensu próbowa odczy-tywa dane z sensora. Innym miejscem, w którym nale�y doda funkcj� „wyrejestro-wania”, jest metoda cyklu �ycia aktywno�ci, onStop().
Niezale�nie od miejsca, z którego wywo�any jest kod, obiekt SensorEventListener jestwyrejestrowywany za pomoc� prostej metody unregisterListener() z klasy SensorManager:
sManager.unregisterListener(SenseBot.this);
420 ROZDZIA� 14Bluetooth i sensory
Trzeba pami�ta, �e je�eli aplikacja zarejestrowa�a wi�cej ni� jeden typ czujnika,konieczne jest wyrejestrowanie wszystkich tych czujników.
Wiemy ju�, jak pod��czy si� do robota i odczytywa warto�ci z czujnika po�o�enia.Czas po��czy ze sob� te informacje i zbudowa aplikacj� SenseBot!
14.3. Budowanie aplikacji SenseBot
Za�o�enia aplikacji SenseBot s� proste — chcemy sterowa robotem LEGO Mind-storms NXT5 przez zmian� orientacji telefonu Android. Nie korzystamy z przewodów —ca�a komunikacja jest realizowana poprzez Bluetooth, a orientacja telefonu pozwala okre-�li sposób poruszania si� robota. Cho robot LEGO jest programowalny, korzystamytylko z wbudowanych mo�liwo�ci manipulowania poszczególnymi silnikami. Zalet�takiego podej�cia jest mo�liwo� wykorzystywania tego programu z niemal ka�dymrobotem LEGO, niezale�nie od umiej�tno�ci programisty robota. Jedynym wymaganiemjest pod��czenie silników do portów wyj�ciowych B oraz C, co jest cz�st� praktyk� przykonstruowaniu robotów LEGO NXT. Na rysunku 14.5 pokazany jest robot z o prostej,dwusilnikowej konstrukcji.
Rysunek 14.5.Prosty robot LEGONXT z silnikamipod��czonymido portów Boraz C
Robot mo�e jecha w przód, w ty�, skr�ca w lewo oraz w prawo. Przechylenie tele-fonu do przodu lub do ty�u spowoduje jazd� robota, natomiast przechylenie go w lewolub prawo powoduje, �e robot skr�ca.
Cho robot jest kontrolowany wy��cznie przez ruchy telefonu, nadal musimy utwo-rzy przydatny i intuicyjny interfejs u�ytkownika. W rzeczywisto�ci interfejs u�ytkow-nika w tej aplikacji jest bardzo wa�ny.
14.3.1. Interfejs u�ytkownika
Interfejs u�ytkownika tej aplikacji jest prosty, ale musi by równie� intuicyjny dlau�ytkownika. Chcemy pokaza u�ytkownikowi, co si� dzieje, aby zapewni mu informa-cje na temat sposobu u�ywania aplikacji. Dodatkowo komunikujemy si� z mechanicz-nym robotem, który niekoniecznie mo�e prawid�owo dzia�a. Robot mo�e wykona nie-
5 Je�eli masz w rodzinie przysz�ego in�yniera robotyki, warto zapozna si� z lig� First Lego League:
http://www.firstlegoleague.org/.
14.3. Budowanie aplikacji SenseBot 421
oczekiwan� akcj� — dlatego po��dane jest, aby mo�na by�o porówna ruchy robotaz wizualnymi wska�nikami wy�wietlanymi w interfejsie u�ytkownika. Musimy wi�cinformowa u�ytkownika o stanie silników przez ca�y czas, gdy urz�dzenie Android jestpod��czone do robota. Na rysunku 14.6 pokazany jest domy�lny interfejs u�ytkownikaprzed pod��czeniem robota.
Rysunek 14.6.Oczekiwaniena pod��czenierobota
Klikni�cie przycisku Po��cz inicjuje sekwencj� ��czenia, zawieraj�c� metod� find�Robot(), pokazan� wcze�niej w punkcie „Pod��czanie si� do zdalnego urz�dzenia”.Po pod��czeniu do robota musimy ukry przycisk Po��cz i zapewni mo�liwo� od��cze-nia od robota za pomoc� przycisku Roz��cz. Dodatkowo chcemy wy�wietli stan silnikówi wy�wietla odczyty z czujnika. Na rysunku 14.7 pokazana jest aplikacja po po��czeniu,gdzie robot ma wy��czone silniki.
Rysunek 14.7.Pod��czeniedo robotaz zatrzymanymisilnikami
Uwaga
Wskaniki silników na ekranie s� warto�ciami zdefiniowanymi w aplikacji i sko-relowanymi z instrukcjami sterowania silnikami, wysy�anymi do robota. Nie s� towarto�ci odczytywane z robota.
Je�eli silniki robota pracuj�, a na ekranie pokazane jest, �e oba s� zatrzymane, wyst�-puje problem z wys�anym poleceniem lub z samym robotem.
Na rysunku 14.8 pokazany jest ekran aplikacji w przypadku wydania poleceniacofania.
Na rysunku 14.9 pokazana jest aplikacja wysy�aj�ca komunikat skr�tu w lewo. Abywykona tak� operacj�, lewy silnik pracuje w ty�, a prawy w przód.
422 ROZDZIA� 14Bluetooth i sensory
Rysunek 14.8.Oba silnikidzia�aj� w ty�
Rysunek 14.9.Skr�t w lewo
Na koniec, gdy aplikacja od��czy si� od robota (albo przez klikni�cie przycisku Roz��cz,albo przez wy��czenie robota), aplikacja wykrywa zdarzenie roz��czenia i wywo�ujemetod� handleDisconnect(), a interfejs u�ytkownika jest aktualizowany, jak jest to poka-zane na rysunku 14.10.
Rysunek 14.10.Stan od��czenia,oczekiwanie nanowe po��czenie
Interfejs u�ytkownika sk�ada si� z dwóch elementów View oraz trzech rysunków6:stop, w gór� (w przód) oraz w dó� (w ty�). Na podstawie warto�ci z czujnika odpowiednielement View ma ustawiane odpowiednie t�o.
6 Warto pobra aplikacj� wy�wietlaj�c� wszystkie zasoby znajduj�ce si� w android.R.drawable urz�dzenia
Android: http://www.appbrain.com/app/android-drawables/aws.apps.androidDrawables.
14.3. Budowanie aplikacji SenseBot 423
Aplikacja ta jest tak zale�na od orientacji telefonu przy sterowaniu robotem, �e niemo�emy pozwoli na zmiany z uk�adu pionowego na poziomy i odwrotnie, poniewa�zarówno powoduje to ponowne uruchomienie aktywno�ci, co mo�e wprowadzi sporozamieszania, jak równie� zmienia orientacj� czujników. Aby spe�ni to wymaganie, w plikuAndroidManifest.xml nale�y do znacznika activity doda poni�szy atrybut:
android:screenOrientation=landscape
Po skonfigurowaniu orientacji nie ma obawy o zmian� uk�adu z poziomego na pio-nowy przy sterowaniu robotem. Uznali�my, �e trzymanie telefonu poziomo pozwala nawygodne „kierowanie”.
Aby zapewni dok�adne skoordynowanie interfejsu u�ytkownika z fizycznymi sil-nikami, konieczne jest przygotowanie mechanizmu sprz��enia, dzi�ki czemu mo�nalepiej sterowa robotem, jak i pomóc przy rozwi�zywaniu problemów z anomaliamiw czasie testowania tego projektu in�ynierskiego.
Komunikacja jest gotowa do dzia�ania, a czujniki orientacji dostarczaj� danych; czaszaj� si� interpretowaniem warto�ci z czujników.
14.3.2. Interpretowanie warto�ci czujnika
Aby sterowa robotem przy u�yciu orientacji telefonu, nale�y zdefiniowa „martw� stref�”,której „�rodek” jest reprezentowany przez pozycj� telefonu w poziomie, z niewielkimodchyleniem w ty�. Po zdefiniowaniu tej pozycji centralnej dodajemy w wymiarachx i y wygodne w u�yciu zakresy czu�o�ci. Dopóki orientacja telefonu nie przekroczywarto�ci czu�o�ci, silniki pozostaj� wy��czone. Zmienne o nazwach xCenter, yCenter,xSensitivity oraz ySensitivity pozwalaj� utworzy „neutralny prostok�t”.
Spójrzmy na metod� onSensorChanged(): w niej w�a�nie odbieramy obiekty SensorEventzawieraj�ce warto�ci dla ka�dego z wymiarów, x, y oraz z. Na poni�szym listingu poka-zana jest kompletna implementacja tej metody wraz z analiz� czujników oraz suge-stiami ruchu.
Listing 14.6. Metoda onSensorChanged() interpretuj�ca orientacj�
public void onSensorChanged(SensorEvent event) { try { if (bConnected == false) return; StringBuilder sb = new StringBuilder(); sb.append("[" + event.values[0] + "]"); sb.append("[" + event.values[1] + "]"); sb.append("[" + event.values[2] + "]"); readings.setText(sb.toString()); // przetwarzanie danych z czujników movementMask = MOTOR_B_STOP + MOTOR_C_STOP;
if (event.values[2] < (yCenter - ySensitivity)) { movementMask = MOTOR_B_FORWARD + MOTOR_C_FORWARD; motorPower = 75;
} else if (event.values[2] > (yCenter + ySensitivity)) { movementMask = MOTOR_B_BACKWARD + MOTOR_C_BACKWARD; motorPower = 75;
424 ROZDZIA� 14Bluetooth i sensory
} else if (event.values[1] >(xCenter + xSensitivity)) { movementMask = MOTOR_B_BACKWARD + MOTOR_C_FORWARD;
motorPower = 50; } else if (event.values[1] < (xCenter - xSensitivity)) { movementMask = MOTOR_B_FORWARD + MOTOR_C_BACKWARD; motorPower = 50; } updateMotors(); } catch (Exception e) { Log.e(tag,"B��d onSensorChanged ::" + e.getMessage()); } }
Przy interpretacji warto�ci dla silników domy�lnie mamy oba silniki zatrzymane .Zwró uwag�, �e silniki B i C s� zarz�dzane osobno. Na pocz�tek sprawdzamy, czywarto� czujnika y jest poza martw� stref� osi y . Je�eli wykryta warto� jest pozagranic� „przechylony w przód”, ruszamy robotem do przodu. Podobnie je�eli odczytanawarto� jest mniejsza od granicy warto�ci spoczynkowej, ruszamy robotem do ty�u, przezw��czenie wstecznych obrotów obu silników. Je�eli nie okre�lili�my ruchu robotaw przód lub w ty�, sprawdzamy kolejne opcje, dla ruchu w lewo lub w prawo . Je�elirobot przesuwa si� w przód lub w ty�, szybko� jest ustawiona na 75% . Je�eli robotskr�ca, jego szybko� jest ustawiona na 50% . Ostatnim krokiem jest przekszta�cenietych masek ruchu na prawdziwe akcje przez zmodyfikowanie stanu silników i zak-tualizowanie interfejsu, aby odzwierciedla� te polecenia.
Poniewa� metoda onSensorChanged() w pe�ni przetwarza dane SensorEvent, czas nauruchomienie silników robota i zaktualizowanie interfejsu u�ytkownika.
14.3.3. Jazda robotem
Jazda robotem jest bardzo prosta — i jednocze�nie z�o�ona — poniewa� polega tylkona w��czeniu silników za pomoc� serii polece�. Sam protokó� polece� jest przedstawionyw nast�pnym punkcie, a teraz skupimy si� na metodzie updateMotors(), w której mody-fikowany jest interfejs u�ytkownika oraz stan silników. Na poni�szym listingu zamiesz-czona jest metoda updateMotors().
Listing 14.7. Metoda updateMotors()
private void updateMotors() { try { if ((movementMask & MOTOR_B_FORWARD) == MOTOR_B_FORWARD) { motorB.setBackgroundResource(R.drawable.uparrow); MoveMotor(MOTOR_B,motorPower);
} else if ((movementMask & MOTOR_B_BACKWARD) == MOTOR_B_BACKWARD) { motorB.setBackgroundResource(R.drawable.downarrow); MoveMotor(MOTOR_B,-motorPower); } else { motorB.setBackgroundResource(R.drawable.stop); MoveMotor(MOTOR_B,0); }
14.3. Budowanie aplikacji SenseBot 425
if ((movementMask & MOTOR_C_FORWARD) == MOTOR_C_FORWARD) { motorC.setBackgroundResource(R.drawable.uparrow); MoveMotor(MOTOR_C,motorPower);
} else if ((movementMask & MOTOR_C_BACKWARD) == MOTOR_C_BACKWARD) { motorC.setBackgroundResource(R.drawable.downarrow); MoveMotor(MOTOR_C,-motorPower);
} else { motorC.setBackgroundResource(R.drawable.stop); MoveMotor(MOTOR_C,0); } } catch (Exception e) { Log.e(tag,"B��d w updateMotors ::" + e.getMessage()); }}
W metodzie updateMotors() porównywane s� ��dania ruchu zdefiniowane w postacizmiennej movementMask, osobnej dla ka�dego z silników . Gdy zostanie znalezionapasuj�ca warto� — na przyk�ad gdy ustawiony jest bit MOTOR_B_FORWARD — w��czany jestdany silnik w zdefiniowanym kierunku i szybko�ci . Kierunek ujemny oznacza jazd�w ty�, a warto� szybko�ci jest skalowana do zakresu od 0 do 100. Dodatkowo aktualizo-wany jest interfejs u�ytkownika w po��czeniu z samymi silnikami, co daje u�ytkow-nikowi mo�liwie dok�adny obraz dzia�ania.
14.3.4. Komunikacja z robotem
Protokó� komunikacji pozwalaj�cy na interakcj� z robotem LEGO NXT sk�ada si�z polece� strukturalnych z opcjonalnym protoko�em odpowiedzi. Ka�dy pakiet danychjest umieszczony w kopercie opisuj�cej jego rozmiar. Wewn�trz koperty ka�de polecenieprotoko�u Direct Command posiada standardowy nag�ówek, po którym nast�puj� spe-cyficzne parametry. W aplikacji tej potrzebujemy tylko jednego polecenia — powodu-j�cego ustawienie stanu dzia�ania silnika. Kod pozwalaj�cy na zbudowanie i wys�anietych pakietów jest pokazany na poni�szym listingu.
Listing 14.8. Metoda MoveMotor
private void MoveMotor(int motor,int speed){ try { byte[] buffer = new byte[14]; buffer[0] = (byte) (14-2); //d�ugo�� lsb buffer[1] = 0; // d�ugo�� msb buffer[2] = 0; // polecenie Direct Command (z odpowiedzi�) buffer[3] = 0x04; // ustawienie stanu wyj�cia buffer[4] = (byte) motor; // wyj�cie 0, 1, 2 (silniki A, B, C) buffer[5] = (byte) speed; // moc buffer[6] = 1 + 2; // w��czenie silnika + hamulec pomi�dzy PWM buffer[7] = 0; // regulacja buffer[8] = 0; // rotacja skr�tu buffer[9] = 0x20; // stan dzia�ania buffer[10] = 0; // cztery bajty danych pozycji
426 ROZDZIA� 14Bluetooth i sensory
buffer[11] = 0; // ustawione na zero buffer[12] = 0; buffer[13] = 0;
os.write(buffer); os.flush(); byte response [] = ReadResponse(4); } catch (Exception e) { Log.e(tag,"B��d w MoveForward(" + e.getMessage() + ")"); }}
Kod ten realizuje prost�, cho precyzyjn� operacj� formatowania polecenia wysy-�anego do robota LEGO, które zapewnia bezpo�redni� kontrol� nad silnikami. Na pocz�-tek deklarujemy bufor o odpowiedniej wielko�ci . Rozmiar tego bufora jest definio-wany przez polecenie SetOutputState, które jest jednym z wielu polece� obs�ugiwanychprzez robota. Ka�da z informacji jest umieszczana w odpowiednim miejscu bufora .Po sformatowaniu bufora polecenia jest on zapisywany do gniazda, a gniazdo opró�-niane . Kod odpowiedzi odczytywany przez metod� ReadResponse() jest znacznikiemprawid�owego odbioru polecenia. Jak si� okazuje, oprócz specyficznego formatowaniadanych steruj�cych robotem, wysy�anie i odbieranie danych poprzez Bluetooth jestrównie proste, co odczyt i zapis do bufora bajtów.
Na tym etapie czujniki dzia�aj�, a urz�dzenie Android i robot LEGO komunikuj� si�ze sob�. Z czasem, po nabraniu praktyki, mo�esz si� sta doskona�ym pilotem robotaLEGO. Pe�ny kod �ród�owy tej aplikacji jest dost�pny do pobrania.
14.4. Podsumowanie
W tym rozdziale wprowadzili�my dwie funkcje platformy Android zorientowane sprz�-towo: Bluetooth i czujniki. Z tych dwóch pozornie niezwi�zanych obszarów dzia�aniawyros�a aplikacja pozwalaj�ca na operowanie robotem LEGO Mindstorms NXT. Poka-zali�my tu najwa�niejsze kroki wymagane do po��czenia urz�dzenia Android ze zdal-nym partnerem obs�uguj�cym Bluetooth, z u�yciem protoko�u zast�puj�cego po��czeniekablowe, RFCOMM. Ten kana� komunikacyjny jest u�ywany do wymiany zestawu pole-ce� znanych jako protokó� Direct Command, udost�pniany przez kontroler LEGO NXT.Dzi�ki tym poleceniom mo�na manipulowa silnikami robota, wprawiaj�c go w ruch.Aby interfejs u�ytkownika by� mo�liwie intuicyjny, skorzystali�my z czujnika orientacji,wbudowanego w wi�kszo� telefonów z systemem Android, który pozwala na odczyty-wanie ruchów u�ytkownika. Po�o�enie urz�dzenia jest interpretowane i odpowiadaj�caim seria polece� jest wysy�ana do robota. Sensory nie tylko s� dobr� metod� sterowaniarobotem, ale równie� daj� du�o zabawy!
Oprócz komunikacji poprzez Bluetooth i u�ycia czujników w rozdziale tym poka-zali�my równie� techniki zapewniaj�ce intuicyjne informowanie u�ytkownika o opera-cjach wykorzystywanych przez aplikacj�. Na przyk�ad gdy silniki s� w��czone, u�ytkow-nik widzi na ekranie kierunek obrotu ka�dego z nich. Podobnie ruchy u�ytkownika s�przetwarzane wy��cznie w przypadku aktywnego po��czenia Bluetooth. Poniewa� jest to
14.4. Podsumowanie 427
scenariusz sterowany zdarzeniami, aplikacja demonstruje nas�uch tych zdarze� poprzezdynamicznie rejestrowany obiekt BroadcastReceiver, z odpowiednimi filtrami intencji.
Mamy nadziej�, �e lekcja u�ycia komunikacji Bluetooth oraz czujników, przedsta-wiona w tym rozdziale, by�a ciekawa, a je�eli masz dost�p do robota LEGO Mindstorm,zach�camy do jazdy próbnej.
W nast�pnym rozdziale poka�emy inne sposoby pod��czania urz�dzenia Android dozewn�trznego �wiata — tym razem b�dziemy wykorzystywa mo�liwo�ci platformy dosynchronizowania danych z popularn� biznesow� witryn� spo�eczno�ciow� LinkedIn.
Skorowidz
AAbleson Frank, 18AccountManager, 451adapter, 96, 112
ArrayAdapter, 96CursorAdapter, 96GalleryAdapter, 96ListAdapter, 96
adapter synchronizacji, 460Adaptive Multi-Rate (AMR), 282adb shell, 381adres URI, 40, 41, 49adresy IP, 193ADT, 80Advanced Audio Coding (AAC), 282Advanced Video Coding (AVC H.264), 282akcja, 131
EDIT, 41Intent.ACTION_CALL, 134, 226Intent.ACTION_DELETE, 134Intent.ACTION_EDIT, 134, 442Intent.ACTION_INSERT, 134, 441Intent.ACTION_VIEW, 133MAIN, 51, 128PICK, 41VIEW, 41
aktualizacja dynamiczna, 228aktualizowanie wid�etów, 529, 534aktywno�ci, 92, 103
dzia�aj�ce, 52niedzia�aj�ce, 52u�pione, 53
aktywno�CloseJob, 366FieldService, 340, 343, 344ManaageJobs, 340ManageJob, 372ManageJobs, 359MapViewActivity, 316, 318RefreshJobs, 355ShowJob, 340, 362ShowSettings, 340SiteMonitorConfigure, 539SMSNotifyActivity, 239Splash, 339, 340, 341
alarm, 247, 531ELAPSED_REALTIME, 250ELAPSED_REALTIME_WAKEUP, 250RTC, 250RTC_WAKEUP, 250
AMR-NB, 282AMR-WB, 282analiza pliku uk�adu XML, 120
610 Skorowidz
analizowanie danych intencji, 136Android, 30Android Cloud to Device Messaging (C2DM), 232Android Debug Bridge, 69, 606Android Interface Definition Language (AIDL), 130
pakiety i interfejsy, 149typy danych, 149
Android Market, 36, 603Android Open Source Platform (AOSP), 35Android SDK, 57, 60, 68, 89, 378, 585animacja
<alpha>, 125<rotate>, 126<scale>, 125<translate>, 126
animacja poklatkowa, 261Ant in Action
Second Edition of Java Development with Ant, 79API, 81
AhhtClient, 201Apache HttpClient, 199GData, 212Google Base Atom, 105graficzne, 256java.net, 199OpenGL ES, 268Yahoo! Weather, 130
aplikacjaAndroid
kod �ród�owy, 341okre�lanie procesów, 337pliki zasobów, 339podstawowe wymagania, 333sposoby przesy�ania danych, 350
AppWidgetHost, 505Dev Tools, 464hybrydowa, 487, 489klient-serwer, 195konsolidowana statycznie, 381mobilnego serwisanta, 332OCR, 560SenseBot, 417, 420serwera DayTime, 393, 399SiteMonitor, 509–515
interfejs u�ytkownika, 509podstawy architektury, 515schemat projektu, 513
UA2EFindingEdges, 563aplikacje integracyjne, 465aplikacje systemu, 52aplikacje u�ytkownika, 67
architektura aplikacji i integracji, 335argument
argc, 380, 390argv[], 380, 390
arkusze stylów, 474arkusze stylów dedykowane, 475arm-nonelinux-gnueabi-gcc, 379arm-none-linux-gnueabi-ld, 379arm-none-linux-gnueabi-objdump, 379atrybut
androidid, 75text, 552
autoLink, 511media, 475updatePeriodMillis, 528
atrybuty, 113atrybuty animacji
duration, 126interpolar, 126startOffset, 126
Authentication key (Ki), 220AVD Manager, 588
Bbaza danych, 174
otwieranie bazy danych, 481baza danych kontaktów, 443baza danych MySQL, 373baza danych SQLite, 396bezpiecze�stwo transmisji danych, 334bezpiecze�stwo urz�dzenia, 334biblioteka
JNI, Java Native Interface, 563, 565PhoneGap, 494Stagefright, 37, 282NDK, 562przetwarzaj�ca obraz, 565testowa PV, 282uruchomieniowa, 37
biblioteki, 37OpenCORE, 37OpenGL ES, 37Scalable Games Language (SGL), 37Secure Socket Layer (SSL), 37SQLite, 37, 398WebKit, 37systemowe Androida, 385, 390
BlackBerry, 34Bluetooth, 190, 409
Skorowidz 611
BOOT_COMPLETED, 143budowanie dynamicznej wersji aplikacji, 387bufor g��bi, 275Burnette Ed, 65
CCDMA, Code Division Multiple Access, 218–220cross-kompilacja, 382cross-kompilator, 379CSS, 466cykl �ycia aktywno�ci, 100
faza ca�ego cyklu �ycia, 101faza dzia�ania, 101faza widoczno�ci, 101
cykl �ycia aplikacji, 92cykl �ycia synchronizacji, 458czujnik orientacji, 417, 418czujniki systemu Android, 417
Ddane, 131
binarne, 49instancyjne i metody klasy SiteMonitorModel, 516lokalizacji, 311POST, 372SensorEvent, 424tekstowe, 358wid�etu, 526XML, 352
datagram, 192DDL, 398DDMS, 381debugowanie aplikacji, 86, 464definiowanie
animacji, 125CONTENT_URI oraz MIME_TYPE, 182intencji, 131kolorów, 123kont, 448plików XML, 125stylów, 123surowych plików, 125tablic, 124uk�adu i widoków, 95widoków i uk�adów w zasobach XML, 120wymiarów, 123
Delicious, 209deskryptor aplikacji, 51deskryptor intencji, 46
Developer Network, 437dezasemblacja pliku wykonywalnego, 391diagram klas API widoków, 104dodawanie
kontaktów, 444��czy zewn�trznych, 132wid�etu do ekranu g�ównego, 506
dokumentacja Android SDK, 60dostawca
LocationManager.GPS_PROVIDER, 314LocationManager.NETWORK_PROVIDER, 314LocationManager.PASSIVE_PROVIDER, 314tre�ci, 49
dost�p do sieci, 190drzewo hierarchiczne, 113drzewo widoków, 120dynamiczny interfejs u�ytkownika, 96dystrybucja aplikacji Android, 596, 606dziennik systemu, 45
EEclipse IDE, 585Eclipse in Action
A Guide for Java Developers, 65ekran, 93, 113
dyspozytora, 373g�ówny, 343MapViewActivity, 318powitalny, 341startowy, 341ustawie�, 346ustawie� Bluetooth, 411
eksportowanie us�ugi, 152Electronic Serial Number (ESN), 220element
MIME, 182<activity>, 127<application>, 127<array>, 125<dimen>, 123<intent-filter>, 128, 135<manifest>, 127<userpermission>, 127<uses-permission>, 128div, 480ImageView, 576manifest, 51ProgressDialog, 366TextView, 400, 487uses-library, 319VideoView, 285, 286
612 Skorowidz
elementyintencji, 131menu, 98podrz�dne <item>, 125
emulator, 295, 305emulator Android, 62, 80, 288, 292, 381, 588emulator-tcp5554, 65encje, 335etykiety, 122
Ffigura
GL_LINE_LOOP, 273GL_LINE_STRIP, 273GL_LINES, 273GL_POINTS, 273GL_TRIANGLE_FAN, 273GL_TRIANGLE_STRIP, 273GL_TRIANGLES, 273
figury proste OpenGL ES, 273filtr intencji, 41, 130, 135, 539filtrowanie informacji, 78fokus, 115
typ DEFAULT_FOCUS, 115typ WEAK_FOCUS, 115
folder src, 72format
.dex, 79AARRGGBB, 576GPS Exchange, 307ISO, 543JSON, 336Keyhole Markup Language (KML), 309@string/<identyfikator>, 552
formatowanie numerów telefonów, 228forum WWW, 23funkcja
alert(), 492converttogray(), 567, 569deleteAllRecords(), 484detectedges(), 569exit(), 390file_get_contents(), 375getJobsXML(), 375glDrawArrays(), 274GLU.gluLookAt(), 278gluPerspective(), 276
parametr aspect, 276parametr fovy, 276parametr gl, 276
parametr zFar, 276parametr zNear, 276
htons(), 396LogCat(), 567main(), 380, 392RecordHit(), 396saveRecord(), 484SetSearchTerm(), 491, 493toString(), 359transaction(), 482wait(), 495
funkcje debugowania, 86funkcje eksportu i importu danych, 598funkcje gniazd, 396funkcje lokalizacyjne, 304funkcje �rodowiska Eclipse, 63funkcje telefoniczne, 221
GGallardo David, 65geokodowanie, 325globalne dane stanu, 98gniazdo, 199gniazdo serwera, 196Google Maps, 82, 304GPS, 33GSM, Global System for Mobile
Communications, 218
Hhas�o, 450Hatcher Erik, 79hierarchiczna struktura widoków, 92hierarchiczne drzewo elementów View, 103HTML, 466HTTP, HyperText Transfer Protocol, 190, 199HttpClient, 201
IICANN, Internet Corporation
for Assigned Names and Numbers, 194IDE Eclipse, 63identyfikator
kontaktu, 439, 441numeryczny wid�etu, 515php input, 375procesu, 66u�ytkownika, 79, 373, 450
Skorowidz 613
IDL j�zyk definicji interfejsu, 148implementacja biblioteki, 567implementacja interfejsu u�ytkownika, 346informacja o lokalizacji, 309instalacja
ADT, 590Android SDK, 584CodeSourcery, 379Eclipse, 584wtyczki ADT dla Eclipse, 584, 590
instancjaAVD, 81klasy android.media.MediaRecorder, 293, 297MediaPlayer, 284
instrukcjaimport, 77return, przepe�nienie stosu, 390
Integrated Circuit Card Identifier (ICCID), 220intencja, 39, 41, 130
inicjowanie akcji, 133Intent.ACTION_CALL, 134, 226Intent.ACTION_DIAL, 134, 226jawna, 42mechanizmy rozpoznawania, 132metody do rozg�aszania, 142niejawna, 42wbudowana, 131wype�nianie danych, 134wywo�anie jawne, 132wywo�anie niejawne, 131, 134zdefiniowana, 43
interfejs, 148IBinder, 150LocationListener, 317programowy aplikacji (API), 81SensorEventInterface, 418SurfaceHolder, 271u�ytkownika, 44, 77u�ytkownika dyspozytora, 372zdalny, 148, 151
IMEI, International Mobile Equipment Identity, 220IMSI, International Mobile Subscriber Identity, 220International Telecommunication Union H.263
(H.263), 282IP, Internet Protocol, 190IPC, 148iPhone, 34
Jjarsigner, 600Java Development Tools (JDT), 64Java ME, 39Java Micro Edition, 34JavaBean, 98Javadoc, 60, 588JavaScript, 466j�dro systemu Linux, 36jednow�tkowo� interfejsu, 117j�zyk C, 378j�zyk Java, 57JPEG, Joint Photographic Experts Group, 282JQuery, 468JRE, 584
Kkana� alfa, 568karta SD, 171karta SIM, 220katalog
android, 599app, 67drawable, 262build, 562gen, 149jni, 565libs, 565platforms, 587res, 73, 117res/anim, 125, 262res/drawables, 73res/layout, 54, 73, 121res/raw, 168, 283res/values, 74, 123, 547samples, 589sdcard, 295shared_prefs, 164system/lib, 385tools, 68, 305, 589
katalog docelowy, 383kategoria, 41
CATEGORY_LAUNCHER, 41LAUNCHER, 128
keytool, 599King Chris, 18klasa
Activity, 44, 181AlarmManager, 247, 253AlertDialog, 99
614 Skorowidz
klasaandriod.content.ContentValues, 293android.app.Activity, 94android.util.Log, 46Application, 574AppWidgetManager, 514AppWidgetProvider, 505, 506, 514, 519
metoda checkForZombies, 520metoda onDeleted, 520metoda onDisabled, 520metoda onEnabled, 520metoda onReceive, 520metoda onUpdate, 520metoda UpdateOneWidget, 520
Binder, 128Bluetooth, 410BroadcastReceiver, 46, 143, 240Bundle, 350Camera, 287ConnectivityManager, 190, 195ContentProvider, 49, 180–188, 516ContentResolver, 49Context, 46, 167Criteria, 314Cursor, 49DoCloseJob, 370Drawable, 257DrawSurfaceView, 276FieldService, 344Geocoder, 305, 325, 326GeoPoint, 319Handler, 109, 201, 265Intent, 40, 57, 133IntentFilter, 40ItemizedOverlay, 322java.text.DecimalFormat, 549java.text.DecimalFormatSymbols, 549java.text.SimpleDateFormat, 549java.util.Formatter, 554java.util.GregorianCalendar, 549java.util.Locale, 549JobEntry, 349JobList, 350JobListHandler, 352LayoutParams, 113Locale, 546LocationListener, 315LocationManager, 304, 311, 313LocationProvider, 311, 314Log, 78Looper, 109, 358
MapActivity, 317, 318, 319MapController, 319MapView, 317, 319MapViewActivity, 312MediaRecorder, 292Message, 265Notification, 242, 243, 253NotificationManager, 47, 253Overlay, 319OverlayItem, 322PhoneNumberUtils, 227PhoneStateListener, 218Prefs, 343R, 56, 77, 120R.java, 92RefreshJobs, 356RemoteViews, 524Requester, 401ResponseHandler, 201Sensor, 417SensorEvent, 417SensorEventListener, 417SensorManager, 416, 417Service, 45SharedPreferences, 343, 519SiteMonitorConfigure, 514SiteMonitorBootstrap, 514, 533SiteMonitorModel, 514, 516, 529SiteMonitorWidget, 513SiteMonitorWidgetImpl, 514, 520SmsManager, 231SmsMessage, 231, 238Stub, 149SurfaceView, 271TelephonyManager, 218, 222Toast, 238, 241UA2EFindEdgesApp, 574UAChrome, 500View, 103, 368ViewGroup, 113WeatherAlertService, 141, 147WebChromeClient, 500WTApplication, 491, 496
klasa bazowaBroadcastReceiver, 143ItemizedOverlay, 322LayoutParams, 113OverlayItem, 322
klasa dziedzicz�ca, 45klasa globalna WTApplication, 491, 496klasa mened�era informacji, 221
Skorowidz 615
klasa odbiornika, 144klasa pochodna, 95klasa pomocnicza, 203klasa wewn�trzna, 113klasa zasobów aplikacji, 118klauzula
Order By, 49Where, 49
klient, 194J2ME, 215DayTime, 400, 402
klikni�cie, 40klucz API Google Maps, 319kod
bajtowy, 38nas�uchu, 78natywny, 576obs�ugi ekranu, 94odpowiedzi, 426PHP aplikacji dyspozytora, 374PHP do integracji z aplikacj� mobiln�, 375serwera, 372startowy, 391symulatora, 81z JavaScript, 491
kodeki d�wi�ku, 282kodeki mowy, 282kodery oraz dekodery wideo, 282kolejkowanie podpisów, 368kompilator gcc, 379kompilowanie biblioteki JNI, 571kompilowanie pliku, 386komponent ListView, 105komponent Observable, 116komponenty widoku, 119komunikat skr�tu w lewo, 421komunikat Toast, 238konfigurowanie
instancji wid�etu, 527karty SD, 286obiektu Handler, 342opcji budowania, 580strumienia wej�ciowego, 415�rodowiska emulowanego, 81wtyczki Eclipse, 592
konsolidowanie programu, 386konstruktor klasy ReviewAdapter, 112kontakt wywo�any z aplikacji, 442kontener, 95kontener ViewGroup, 113konto Google, 433
konto Microsoft Exchange, 433kontrolka
EditText, 510przegl�darki, 468, 487, 489WebView, 488
korze� drzewa widoków, 121kraw�dzie obrazu, 576kreator projektu aplikacji, 72kwalifikatory do organizowania
i definiowania zasobów, 551
Llicencja
Apache Software License (ASL), 35General Public License (GPL), 35u�ytkownika (EULA), 597License Verification Library (LVL), 602
LinkedIn, 430, 436interfejs u�ytkownika, 451logowanie, 453synchronizowanie danych, 459tworzenie konta, 450uwierzytelnianie, 451
linker, 379, 386–387, 399lista recenzji, 105lista zlece�, 336, 352localhost, 71Location Area Identity (LAI), 220LogCat, 596lokalizacja dok�adna (FINE), 315lokalizacja zgrubna (COARSE), 315lokalizowanie
aplikacji, 550aplikacji Android, 542kodu Java, 553
lokalna baza danych SQL, 477Loughran Steve, 79
���cze symboliczne do katalogu, 561��czenie i rozdzielanie kontaktów, 435��czenie danych z widokiem, 112��czenie surowych danych kontaktów, 435
Mmacierz to�samo�ci, 274magazyn kluczy, 599magazyn SharedPreferences, 514
616 Skorowidz
manifest dostawcy tre�ci, 187MapView, 324maszyna Java, 57maszyna wirtualna Dalvik, 37, 39McGovern Robert, 65mechanizm pó�nego ��czenia, 134mechanizm rejestrowania, 46mechanizm SharedPreferences, 188mened�er SMS, 232menu
Develop, 485Favorites, 86Favorites Debug, 86Favorites Run, 86Window, 86
metadane wid�etu, 527metoda
addAccount(), 456addToDB(), 294AndroidBitmap_getInfo(), 569asInterface(), 150beginRecording, 300Binder.onTransact(), 151cancel(), 247Canvas.drawColor(), 370checkForZombies(), 522confirm(), 501Context.bindService(), 153Context.startService(), 156Context.stopService(), 156detectedges(), 577draw(), 324execute(), 206findViewById(), 122findAll(), 499findViewById(), 54, 78formatNumber(), 228GET, 207getAppWidgetIds(), 524getAvtivity(), 525getDataFromSite(), 537getDefault(), 546getDefaultSensor(), 417getFormattedDate(), 519getInstance(), 524getProvider(), 313getSharedPreferences(), 160getSystemService(), 195getter(), 574getText(), 55, 78getView(), 112
glVertexPointer(), 274handleDisconnected(), 419handleConnected(), 415handleDisconnect(), 422handleDisconnected(), 415handleMessage(), 110loadReviews(), 108, 109managedQuery(), 181MediaRecorder.setAudioEncoder(), 293, 297MediaRecorder.setOutputFormat(), 293, 297MediaRecorder.setAudioSource(), 293, 297MediaRecorder.setPreviewDisplay(), 293, 297MediaRecorder.setVideoEncoder(), 297MediaRecorder.setVideoSource(), 297nextFocusDown(), 115nextFocusLeft(), 115nextFocusRight(), 115nextFocusUp(), 115onActivityResult(), 365, 438, 576onBind(), 46OnClickListener(), 78onCreate(), 95, 100–101, 401onCreateOptionsMenu(), 368onDeleted(), 522onDestroy(), 101, 530onDisabled(), 523onDraw(), 112, 370onJsAlert(), 500onKeyDown(), 291onLayout(), 112onListItemClick(), 108onMeasure(), 112onPageFinished(), 496onPageStarted(), 496, 499onPause(), 100, 319onPrrformSync(), 459onReceive(), 47, 522–523, 531onReceivedSslError(), 496onRestart(), 101onResume(), 101, 319onSensorChanged(), 418, 423onServiceConnected(), 153onStart(), 101onStop(), 101, 419onUpdate(), 522, 525, 531onVisibilityChanged(), 112openInputStream(), 49PlaceCall(), 491prepare(), 284, 293ProgressDialog.show(), 109ReadResponse(), 426
Skorowidz 617
release(), 293requestLocationUpdates(), 317Resources.getXml(), 125Resources.openRawResource(), 125run(), 110saveWidgetData(), 519sendBroadcast(), 142sendDataMessage(), 231sendEmptyMessage(), 110sendEmptyMessageAtTime(), 110sendEmptyMessageDelayed(), 110sendMessage(), 110sendMultipartTextMessage(), 231sendOrderedBroadcast(), 142sendStickyBroadcast(), 142sendTextMessage(), 231set(), 247setAlarm(), 534setContentView(), 54setContentView(), 95, 524setInt(), 525setListAdapter(), 109setOnClickListener(), 525setOnClickPendingIntent(), 525setOnFocusChangedListener(), 115setRepeating(), 247setResult(), 47setter(), 574setText(), 78setTimeZone(), 247setVideoSize(), 297start(), 284, 293startActivity(), 44startActivityForResult(), 44startService(), 46stop(), 293stopSelf(), 536System.loadLibrary(), 566tap(), 324toString(), 546touch(), 324transaction(), 482
funkcja wywo�ywana po wykonaniu instrukcjiSQL, 483
parametryzowana instrukcja SQL, 482procedura obs�ugi b��dów, 484tablica obiektów JavaScript, 482
updateMotors(), 424updateOneSite(), 537UpdateOneWidget(), 525validate(), 99
View.requestFocus(), 115metody
cyklu �ycia aktywno�ci, 101cyklu �ycia aplikacji, 95cyklu �ycia widoku, 112lokalizacji, 304statyczne klasy SiteMonitorModel, 517uzyskania referencji obiektów
LocationProvider, 314w API klasy bazowej View, 105w klasie TextView, 105wywo�ania zwrotnego, 523
Microsoft Exchange, 34Mobile Equipment Identity (MEID), 220mobilne aplikacje WWW, 485modu� rozszerzaj�cy Android Development Tools
(ADT), 60modyfikowanie danych kontaktowych, 444MP3, Moving Picture Experts Group Audio Layer 3,
282MPEG-4, Moving Picture Experts Group 4, 282MXL, 209
Nnadmiarowe instrukcje, 596nadpisywanie funkcji przegl�darki, 487nag�ówek content-type, 206NANP, North American Numbering Plan, 229narz�dzia wiersza polece� Codesourcery, 381narz�dzie
adb, 382, 589, 607Android Asset Packaging Tool, 69arm-none-linux-gnueabi-objdump, 391Error Console, 485GUI Layout, 76mksdcard, 171objdump, 379telnet, 48, 71, 307Web Inspector, 485
nas�uch, 105nas�uch zdarze�, 116nas�uch ��da� intencji, 135National Data Buoy Center (NDBC), 304NDK, Android Native Development Kit, 378,
560–577ndk builder, 577NDK w Eclipse, 577NTLM, Windows NT Lan Manager, 206
618 Skorowidz
Oobiekt
AccountManager, 455Activity, 41, 136, 232Adapter, 107Application, 499Binder, 449BluetoothDevice, 414Broadcast, 232BroadcastReceiver, 41, 136, 142, 532Bundle, 102, 143, 361Button, 55Canvas, 257DefaultHttpClient, 206Drawable, 266FileInputStream, 352, 372GeoPoint, 305, 326grabReviews, 95Handler, 107, 109, 119HandlerThread, 110Intent, 41IntentFilter, 48, 135, 136java.net, 200JNIEnv, 566JobList, 354JobListHandler, 352JsResult, 501LayoutParams, 113ListView, 106
w�a�ciwo�ci, 108LocationListener, 317LocationManager, 141, 317LocationProvider, 317Looper, 110NetworkInfo, 195Notification, 245null, 494Observer, 116OnFocusChangeListener, 115Overlay, 304, 321, 326PendingIntent, 232, 314, 525PhoneStateListener, 218Prefs, 348, 368ProgressDialog, 357RemoteViews, 524ReviewListView, 111Runnable, 110SensorManager, 416Service, 41, 136, 232SharedPreferences, 160
Spinner, 96Toast, 441Uri, 131View, 44
w�a�ciwo�ci, 122ViewGroup, 113WebView, 501WebViewClient, 496
obiekt nas�uchu, 285, 317obiekt nas�uchu zdarze� telefonicznych, 221obiekt obs�ugi JavaScript, 489obiekt uwierzytelniania, 206obs�uga
b��du, 361intencji, 43interfejsu u�ytkownika, 43kamery, 287OpenGL, 267transakcji wymiany danych, 335wid�etów zombie, 523wielu kont, 433zlecenia, 362��da� intencji, 135
odbieranie wiadomo�ci SMS, 230, 233, 239odbiornik aktualizacji lokalizacji, 315odbiornik intencji, 240odbiornik SiteMonitorBootstrap, 539odcisk MD5 certyfikatu, 320odczyt warto�ci czujnika, 418oddzielanie litera�ów znakowych od kodu, 122odtwarzanie przyrostowe, 282odtwarzanie strumieniowe, 282odtwarzanie wideo, 285odwo�anie, 121odwo�anie typu int, 122odwrotne geokodowanie, 325okno pow�oki komputera Linux, 382okno wiersza polece�, 382okre�lanie pasuj�cych akcji i kategorii, 136okre�lanie pasuj�cych intencji, 136opcja
-c, 386-static, 381Konta, 448push, 383Reset Perspective, 65shell, 383Show View, 65viewport, 470linkera, 389wiersza polece�, 84znacznika meta viewport, 472
Skorowidz 619
Open Headset Alliance, 32OpenCORE, 282OpenGL, 256OpenGL ES, 256, 267, 268, 279operacje CRUD, 185
Ppakiet, 192
Android Native Development Kit (NDK), 378,560–577
android.app, 44, 61android.app.Service, 46android.bluetooth, 61, 409android.content, 61android.gesture, 61android.graphics, 61, 256android.hardware, 416android.location, 61android.net, 61android.opengl, 61android.os, 61android.provider, 62android.telephony, 62, 222, 231android.text, 62android.util, 62android.view, 62, 103android.webkit, 62, 487, 488, 496android.widget, 62, 112com.google.android.maps, 319com.msi.manning.nlockingandroid, 48java.io, 61java.lang, 61java.math, 61java.net, 61java.text, 61javax.net, 61javax.security, 61javax.xml, 61kSOAP, 215org.apache, 61org.xml, 61Sourcery G++, 379
pakiet graficzny, 256panel Emulator Control, 305parametr
Class, 132ComponentName, 132data, 232deliveryIntent, 232destinationAddress, 232
destinationPort, 232scAddress, 232sentIntent, 232user agent, 473wipe-data, 84
parowanie urz�dzenia, 412parser SAX, 106, 352parsowanie numerów telefonów, 228PDU, 234, 241PendingIntent, 232perspektywa, 63
DDMS, 65, 225, 295, 305, 382Debug, 86Eclipse, 88Java, 64OpenGL, 276
p�tla zwrotna, 71, 193, 197Phone 7, 34PID aplikacji, 66platforma, 31platforma LinkedIn, 430platforma multimedialna, 282plik
.aidl, 149addjob.php, 374android.jar, 44, 73, 589Android.mk, 565AndroidManifest.xml, 41, 46–47, 51, 72, 93, 126,
238, 293, 296, 339–340, 423, 516, 538, 597arrays.xml, 124BounceActivity.java, 264BounceView.java, 266ChapterTwo.java, 72CloseJob.java, 339closejob.php, 374, 375colors.xml, 123corestuff.css, 474db.html, 480db.js, 480db.php, 374debug.keystore, 599dimens.xml, 123eclipse.exe, 585export.php, 374FieldService.java, 339, 343, 344footer.php, 374getjoblist.php, 374, 375handheld-small.css, 475header.php, 374index.html, 489index.php, 374
620 Skorowidz
plikjni.h, 566JobEntry.java, 339JobList.java, 339JobListHandler.java, 339libua2efindedges.so, 572main.xml, 54, 74, 516, 572make, 571manage.php, 374ManageJobs.java, 339monitor.xml, 516output.txt, 565Prefs.java, 339R.class, 75R.java, 55, 73, 338, 339, 554RefreshJobs.java, 339releasekey.keystore, 599review_criteria.xml, 96savejob.php, 374screen.css, 475screenfonts.css, 475SDK Setup.exe, 587ShowJob.java, 339showjob.php, 374ShowSettings.java, 339Simple_animation.xml, 262SiteMonitorBootstrap.java, 516, 532SiteMonitorConfigure.java, 516SiteMonitorModel.java, 516SiteMonitorService.java, 516sitemonitorwidget.xml, 516, 527SiteMonitorWidgetImpl.java, 516Splash.java, 339splash.xml, 341strings.xml, 56, 437, 516, 547, 551styles.xml, 124ua2efindedges.c, 567, 572updatejob.php, 374utils.php, 374xmldrawable.xml, 259
plik deskryptora aplikacji, 128plik instalacji, 71plik nag�ówkowy, 380plik wsadowy, 78, 387plik wynikowy, 79plik zasobu XML, 95pliki
AIDL, 148APK, 600class, 79CSS, 473
dex, 39, 79ELF, 391GPX, 307JAR, 437KML, 310PNG, 265XML, 79, 95zasobów ze stylami, 124
pobieranie napisu, 554podmenu Open Perspective, 86podpisywanie cyfrowe aplikacji, 599pola klasy Notification, 243pole
accuracy, 418Latitude, 306Longitude, 306Sensor, 418timestamp, 418values, 418
pole kategorii, 41polecenia pow�oki, 71po��czenia Bluetooth, 410po��czenie sieciowe
EDGE, 81EVDO, 81GPRS, 81
po��czenie szyfrowane SSL, 334po�o�enie u�ytkownika na mapie, 322port 5037, 71port TCP 1024, 394porty, 194
dynamicznie przydzielane, 194prywatne, 194rejestrowane, 194zarezerwowane, 194
POSIX, Portable Operating System Interfacefor UNIX, 196
powiadomienia, 243debugowania, 596na pasku stanu, 244o alarmie na pasku stanu, 253
powiadomienie Toast, 244, 494, 498POX, 209POX XML over HTTP, 191pó�ne do��czanie, 43pracownik mobilny, 333, 334, 336procedura startowa, 390proces AIDL, 150program
aapt, 69, 118adb, Android Debug Bridge, 69, 387, 399AVD Manager, 81
Skorowidz 621
netstat, 71pocztowy POP3, 447SDK and AVD Manager, 81sqlite3, 179
programowanie WWW, 466projekt
SiteMonitor, 508linkedin-j, 437open source PhoneGap, 494
protokó�Atom Publishing (AtomPub), 212bezprzewodowy Bluetooth, 409Direct Command, 426IP, 192komunikacji z robotem, 425
Prototype, 468przechwytywanie
alarmu, 249mediów, 287podpisu, 366po��cze�, 229rozmów, 226zdarze�, 116, 370zdarze� Bluetooth, 414
przeci��ony konstruktor klasy, 42przep�yw danych pomi�dzy central� a
pracownikiem mobilnym, 335przep�ywy sterowania w aplikacji serwisowej, 337przesy�anie danych do serwera, 366przetwarzanie obrazu
interfejs u�ytkownika, 572przyciski ekranowe, 98przyk�adowe dane aplikacji, 596Pseudo Electronic Serial Number (pESN), 221publikowanie w Android Market, 602puste procesy, 53
Rreferencja
do adaptera, 414do AppWidgetManager, 526do danych osoby, 442do obiektu AlarmManager, 534do obiektu Application, 577do OutputStream, 370do progresshandler, 359do samej siebie (this), 99
rejestr filtrów intencji, 135rejestracja nas�uchów, 317rejestracja zdarze� czujnika, 419
rekord kontaktu, 41rekord o sta�ej d�ugo�ci, 432rekord otwarty, 431relacje mi�dzy aktywno�ciami, widokami,
zasobami, 92repozytorium, 447REST, 209, 211
POST, 207, 212PUT, 212GET, 212DELETE, 212
REST, Representational State Transfer, 191RFC, Requests for Comments, 199RFCOMM, 409robot LEGO Mindstorms NXT, 420, 426routing pakietów, 193rozg�aszanie akcji, 143rozg�aszanie intencji, 142rozmiary widoku, 114rozmiary aktualne widoku, 114rozpoznawanie intencji, 137rozszerzanie klasy WebViewClient, 500rozszerzanie przegl�darki, 496rysowanie przy u�yciu XML, 257
Sschemat, nazwa i �cie�ka w adresach URI, 136selektywne �adowanie tre�ci, 472Selman Daniel, Java 3D Programming, 279Sen Robi, 18SenseBot
interfejs u�ytkownika, 420Serial Port Profile (SPP), 409serwer, 194, 197serwer czasu, 378serwer DayTime, 393, 403serwer korzystaj�cy z gniazd TCP, 394sieci telefoniczne, 218silnik JavaScript, 467silnik przegl�darki WebKit, 33, 466skalowanie, 472skalowanie widoku, 126skrypt budowania, 399skrypt budowania aplikacji, 384skrypt ndk-build, 572skrzynka SMS, 247smartfon, 32, 430SmartPhone, 34SMS, Short Message Service, 230SMTP, Simple Mail Transfer Protocol, 193
622 Skorowidz
SOAP, Simple Object Access Protocol, 191, 209,215–216, 335
specyfikacja 3GPP, 3rd Generation PartnershipProject, 234, 282
sprawdzanie po��czenia sieciowego, 195SQLite, 174, 188sqlite3, 179Stagefright, 283sta�a
Context.MODE_PRIVATE (), 163Context.MODE_WORLD_READABLE (), 163Context.MODE_WORLD_WRITEABLE (), 163FILL_PARENT, 114MIME_TYPE, 437UPDATE_FREQUENCY, 533WRAP_CONTENT, 114
stan od��czenia, 422stan procesów, 100stan telefonu, 224standard pkzip, 79sterowanie robotem, 423stos, 36, 37stos TCP/IP, 194struktura drzewiasta, 96styl lokalny, 124Symbian, 34symbol @, 51, 56symulator, 81synchronizacja, 447, 458, 465synchronizacja i wspó�dzielenie danych, 404synchronizowanie kont, 458system centralny, 333system komunikacji mi�dzyprocesowej (IPC), 128system OpenCORE, 282
��cie�ka logiczna android_asset, 489�rodowisko
emulowane, 67programistyczne, 584
Ttabela raw_contacts, 434tabela tbl_jobs, 373TCP, 193TCP/IP, Transmission Control Protocol/Internet
Protocol, 192TDMA, Time Division Multiple Access, 219technologia zarz�dzania bazami danych, 477
telefonia, 218telefony
Android, 218CDMA, 232GSM, 232
telnet, 48, 71, 307tematy, 124test g��bi, 276testowanie
aktywno�ci, 598aplikacji w emulatorze, 85klienta DayTime, 403regresyjne aplikacji, 598wiadomo�ci SMS, 48
tryb macierzy GL_PROJECTION, 274tryb mapy, 321tryb projektowania, 79tworzenie
aktywno�ci, 93animacji, 125, 261animacji za pomoc� kodu, 263aplikacji multimedialnych, 301aplikacji WWW, 468dostawcy tre�ci, 182klasy Activity, 94klucza, 599konfiguracji uruchamiania emulatora, 82konta LinkedIn, 450kontekstu OpenGL, 268nowego kontaktu, 441nowego urz�dzenia AVD, 83odbiornika, 143prostok�ta z wykorzystaniem figur prostych
OpenGL, 272strumieni wej�cia i wyj�cia, 416trójwymiarowych kszta�tów, 275wid�etu, 508w�asnych widoków, 111
typ danychGL_BYTE, 274GL_FLOAT, 274GL_SHORT, 274
typ MIME, 136typ tablicy GL_VERTEX_ARRAY, 274typy alarmów, 250
UU.S. National Oceanic and Atmospheric
Administration (NOAA), 304uchwyt transakcji bazy danych, 483
Skorowidz 623
UDP, User Datagram Protocol, 193uk�ad FrameLayout, 113uk�ad LinearLayout, 113uk�ad RelativeLayout, 113uk�ady, 113umieszczanie aplikacji w Android Market, 603URI, Uniform Resource Identifier, 40, 212URL, Uniform Resource Locator, 40uprawnienie android.permission
.CALL_PHONE, 128, 224
.CALL_PRIVILEGED, 224
.MODIFY_PHONE_STATE, 224
.PROCESS_OUTGOING_CALLS, 224
.READ_PHONE_STATE, 224
.READ_SMS, 233
.RECEIVE_SMS, 233
.SEND_SMS, 233
.WRITE_CONTACTS, 443
.WRITE_SMS, 233uprawnienie
AUTHENTICATE_ACCOUNTS, 450BLUETOOTH, 409, 416CAMERA, 296GET_ACCOUNTS, 450MANAGE_ACCOUNTS, 450READ_PHONE_STATE, 224RECORD_AUDIO, 296USE_CREDENTIALS, 450WRITE_EXTERNAL_STORAGE, 296WRITE_SETTINGS, 450
urz�dzenie wirtualne Android, 306urz�dzenia AVD, 83us�uga, 531
AccountManager, 449prognozy pogody, 144SiteMonitorService, 514, 534, 539WeatherAlertService, 144
us�ugi, 52cykl �ycia, 156uruchamianie i do��czanie, 155sieciowe, 190, 209wi�zania, 148
ustawienia regionalne, 543, 546uwierzytelnianie
bazuj�ce na formularzu, 206konta, 449podstawowe, 206w LinkedIn, 451
u�ytkownik mobilny, 474
VVideoView, 285, 297
Wwarstwa, 192
abstrakcji, 36aplikacji, 192danych, 49komunikacyjna, 128po��czenia, 192sieci, 192transportowa, 192
warto� identyfikatora zlecenia, 375w�tek, 109, 358w�tek g�ówny interfejsu u�ytkownika, 109, 204w�ze�, 192wideotelefonia, 282widok, 92, 103
cuisine, 95Devices, 65EditText, 54EditView, 54Emulator Control, 67File Explorer, 67grabReviews, 95Javadoc, 64LinearView, 55location, 95LogCat, 66, 77MapView, 304, 319Package Explorer, 64, 72Problems, 64
widokipodrz�dne, 113statyczne, 96z�o�one, 112
wid�et, 504wiersz polece�, 71Wi-Fi, 190WiMAX, Worldwide Interoperability for
Microwave Access, 190Windows Mobile, 34w�a�ciwo�ci ListView, 108w�a�ciwo�ci View, 122wspó�rz�dne geograficzne, 306wstawianie danych do bazy danych, 394wstawianie i usuwanie wierszy, 484wyczerpywanie zasobów systemu, 52wykonanie zdj�cia, 574wykrywanie kraw�dzi, 560, 576
624 Skorowidz
wykrywanie kraw�dzi metod� Sobela, 560wymagania funkcjonalne, 336wynik aktywno�ci
RESULT_CANCELED, 530RESULT_OK, 530
wysy�anie wiadomo�ci SMS, 231wywo�ania zwrotne cyklu �ycia, 100wywo�anie
characters(), 354endElement(), 354Looper.loop(), 359Looper.prepare(), 359POST, 375setResult(), 366startElement(), 354
wywo�anie aplikacji zewn�trznych, 134wzorce instalowania wid�etów, 508
Zzabezpieczenie CAPTCHA, 214zamkni�cie zlecenia, 370zapis @id, 122zapisywanie d�wi�ku, 292zapisywanie mediów, 282zapisywanie wideo, 295zapytanie, 49zapytanie media, 474zarz�dzanie kontaktami, 438zasady Android Market, 602zasoby, 92, 117
graficzne, 120grupa animacje, 123grupa kolory, 123grupa napisy, 123grupa style, 123grupa tablice, 123grupa wymiary, 123lokalne, 120res/anim, 117res/drawable, 117res/layout, 117res/raw, 118res/values, 118res/xml, 118XML, 169
zdarzenia systemowe, 45zdarzenie, 116
ACTION_ (ACL_DISCONNECTED, 414ACTION_ACL_ (DISCONNECTED, 409ACTION_ACL_CONNECTED, 409, 414ACTION_DOWN, 370
ACTION_MOVE, 370ACTION_UP, 370Aplikacja nie odpowiada (ANR), 109onCreate(), 116onFocusChanged(), 116onFreeze(), 116onLayout(), 116onSizeChanged(), 116onTouchEvent(), 116setMessage(), 117
zdarzenie interfejsu, 117zdarzenie roz��czenia, 422zdefiniowane urz�dzenia AVD, 83ZigBee, 190z��czenie widoków, 96zmienna
$data, 375AuthToken, 453browser, 488java.util.Date, 519LOCAL_LDLIBS, 572
zmienne typu wyliczeniowego (enum), 266zmniejszanie liczby procesów, 99znacznik
<intent-filter>, 41, 48, 51<joblist>, 375<receiver>, 46, 51<service>, 51<uses-permission>, 48, 539<uses-permissions>, 51corners, 260Drawable, 323ImageView, 262meta, 470meta viewport, 492padding, 260stroke, 260viewport, 470, 471, 474, 477
zwi�zanie kamery emulatora z widokiem, 288
��danie
ACTION_PICK, 438HTTP GET, 199HTTP POST, 201klucza dla API LinkedIn, 437
�eton uwierzytelniania, 450, 455
Top Related