Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00273 006371 12422134 na godz. na dobę w sumie
Hello, Android. Programowanie na platformę Google dla urządzeń mobilnych. Wydanie III - książka
Hello, Android. Programowanie na platformę Google dla urządzeń mobilnych. Wydanie III - książka
Autor: Liczba stron: 312
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-3140-7 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie mobilne >> android
Porównaj ceny (książka, ebook, audiobook).

Przygotuj aplikację na najpopularniejszą platformę mobilną!

Android to system operacyjny dla telefonów komórkowych, który swoją dynamiką wzrostu udziału w rynku przyćmił niejeden produkt. Według badań IDC dla Europy Zachodniej w ciągu niecałego roku Android zwiększył swój udział z 4 do 31 procent! Co jest tego przyczyną? Niezwykle precyzyjnie wykonana i doskonale działająca synchronizacja danych ze wszystkimi najważniejszymi usługami firmy Google, łatwy dostęp do internetu dzięki szybkiej przeglądarce oraz tysiące świetnych aplikacji, zarówno darmowych, jak i płatnych. A skoro mowa o aplikacjach, jak stworzyć własny produkt na tę dynamicznie rozwijającą się platformę? Jak wprowadzić ją na rynek i zarobić?

Na te oraz wiele innych pytań związanych z Androidem odpowie Ci ta książka! Na samym wstępie poznasz trochę faktów związanych w powstawaniem samej platformy oraz zobaczysz, jakie nowości oferowały kolejne jej wersje. Wbrew pozorom wiedza ta przyda się przy tworzeniu aplikacji! Po krótkim wstępie historycznym dowiesz się, jak szybko przygotować stanowisko pracy, oraz poznasz kluczowe pojęcia z nim związane. W trakcie lektury nauczysz się projektować interfejs użytkownika, obsługiwać dane wejściowe czy multimedia. Niezwykle ważne są wiadomości zawarte w części trzeciej. Wykorzystanie tych informacji pozwoli Ci na stworzenie nowatorskiej aplikacji. Dostęp do sieci, usług geolokalizacyjnych, baz SQL i trójwymiarowej grafiki pozwoli Ci rozwinąć skrzydła! Książka ta jest długo wyczekiwaną pozycją, omawiającą wszystkie istotne zagadnienia związane z platformą Android, dlatego musisz ją mieć!

Wykorzystaj potencjał i popularność platformy Android!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Idź do • Spis treści • Przykładowy rozdział • Skorowidz Katalog książek • Katalog online • Zamów drukowany katalog Twój koszyk • Dodaj do koszyka Cennik i informacje • Zamów informacje o nowościach • Zamów cennik Czytelnia • Fragmenty książek online Kontakt Helion SA ul. Kościuszki 1c 44-100 Gliwice tel. 32 230 98 63 e-mail: helion@helion.pl © Helion 1991–2011 Hello, Android. Programowanie na platformę Google dla urządzeń mobilnych Autor: Ed Burnette Tłumaczenie: Krzysztof Sawka ISBN: 978-83-246-3140-7 Tytuł oryginału: Hello, Android: Introducing Google s Mobile Development Platform Format: 168×237, stron: 304 Przygotuj aplikację na najpopularniejszą platformę mobilną! • Co czyni Androida wyjątkową platformą? • Jak zaprojektować interfejs użytkownika? • Jak skorzystać z zaawansowanych usług geolokalizacji i dostępu do sieci? Android to system operacyjny dla telefonów komórkowych, który swoją dynamiką wzrostu udziału w rynku przyćmił niejeden produkt. Według badań IDC dla Europy Zachodniej w ciągu niecałego roku Android zwiększył swój udział z 4 do 31 procent! Co jest tego przyczyną? Niezwykle precyzyjnie wykonana i doskonale działająca synchronizacja danych ze wszystkimi najważniejszymi usługami firmy Google, łatwy dostęp do internetu dzięki szybkiej przeglądarce oraz tysiące świetnych aplikacji, zarówno darmowych, jak i płatnych. A skoro mowa o aplikacjach, jak stworzyć własny produkt na tę dynamicznie rozwijającą się platformę? Jak wprowadzić ją na rynek i zarobić? Na te oraz wiele innych pytań związanych z Androidem odpowie Ci ta książka! Na samym wstępie poznasz trochę faktów związanych w powstawaniem samej platformy oraz zobaczysz, jakie nowości oferowały kolejne jej wersje. Wbrew pozorom wiedza ta przyda się przy tworzeniu aplikacji! Po krótkim wstępie historycznym dowiesz się, jak szybko przygotować stanowisko pracy, oraz poznasz kluczowe pojęcia z nim związane. W trakcie lektury nauczysz się projektować interfejs użytkownika, obsługiwać dane wejściowe czy multimedia. Niezwykle ważne są wiadomości zawarte w części trzeciej. Wykorzystanie tych informacji pozwoli Ci na stworzenie nowatorskiej aplikacji. Dostęp do sieci, usług geolokalizacyjnych, baz SQL i trójwymiarowej grafiki pozwoli Ci rozwinąć skrzydła! Książka ta jest długo wyczekiwaną pozycją, omawiającą wszystkie istotne zagadnienia związane z platformą Android, dlatego musisz ją mieć! • Nowości w poszczególnych wersjach Androida • Instalacja narzędzi oraz przygotowanie środowiska pracy • Kluczowe pojęcia związane z wytwarzaniem aplikacji dla Androida • Korzystanie z zasobów • Projektowanie interfejsu użytkownika, tworzenie elementów menu • Wykorzystanie motywów, tworzenie aktywnych tapet • Grafika dwuwymiarowa oraz trójwymiarowa • Obsługa danych wejściowych • Wykorzystanie multimediów • Przechowywanie danych na urządzeniu mobilnym • Usługi geolokalizacji • Wykorzystanie bazy danych SQLite • Wielodotykowość • Publikowanie aplikacji w serwisie Android Market Wykorzystaj potencjał i popularność platformy Android! Spis treĂci PodziÚkowania ........................................................................................................ 9 Przedmowa ............................................................................................................ 11 Co czyni Androida wyjÈtkowym? .......................................................................................... 11 Dla kogo ta ksiÈĝka jest przeznaczona? .................................................................................. 13 ZawartoĂÊ ksiÈĝki ................................................................................................................ 13 Co nowego w Androidzie? ................................................................................................... 14 Zasoby w internecie ............................................................................................................. 16 Przewijamy .................................................................................................................. 16 CzÚĂÊ I Wprowadzenie do Androida .............................................19 Rozdziaï 1. Szybki start ........................................................................................ 21 1.1. Instalacja narzÚdzi ......................................................................................................... 21 1.2. Tworzymy pierwszy program ......................................................................................... 27 1.3. Uruchomienie aplikacji w emulatorze ............................................................................. 28 1.4. Uruchomienie aplikacji na prawdziwym telefonie ............................................................ 31 1.5. Przewijamy ........................................................................................................... 32 Rozdziaï 2. Kluczowe pojÚcia ............................................................................... 33 2.1. Ogólna perspektywa ...................................................................................................... 33 2.2. To ĝyje! ....................................................................................................................... 38 2.3. Skïadniki budulcowe ..................................................................................................... 42 2.4. Korzystanie z zasobów .................................................................................................. 44 2.5. Stabilnie i bezpiecznie ................................................................................................... 45 2.6. Przewijamy ........................................................................................................... 46 6  Hello, Android CzÚĂÊ II Podstawy Androida ..........................................................47 Rozdziaï 3. Projektowanie interfejsu uĝytkownika ......................................... 49 3.1. Wprowadzenie do Sudoku ............................................................................................ 49 3.2. Projektowanie za pomocÈ deklaracji ............................................................................... 51 3.3. Tworzenie ekranu powitalnego ...................................................................................... 51 3.4. Stosowanie alternatywnych zasobów ............................................................................... 60 3.5. Implementacja okna informacyjnego ............................................................................... 62 3.6. Wprowadzenie motywu ................................................................................................. 67 3.7. Dodajemy menu ........................................................................................................... 68 3.8. Dodajemy ustawienia .................................................................................................... 70 3.9. Uruchamianie nowej gry ................................................................................................ 72 3.10. Usuwanie bïÚdów ....................................................................................................... 73 3.11. WyjĂcie z gry .............................................................................................................. 75 3.12. Przewijamy ......................................................................................................... 76 Rozdziaï 4. PrzeglÈd grafiki dwuwymiarowej ................................................... 77 4.1. Nauka podstaw ............................................................................................................. 77 4.2. Dodawanie grafiki do gry Sudoku .................................................................................. 82 4.3. Obsïuga danych wejĂciowych ......................................................................................... 90 4.4. Reszta historii ............................................................................................................... 96 4.5. Usprawnieñ nigdy za wiele .......................................................................................... 104 4.6. Przewijamy ......................................................................................................... 105 Rozdziaï 5. Multimedia ...................................................................................... 107 5.1. Odtwarzanie děwiÚku .................................................................................................. 107 5.2. Odtwarzanie plików wideo .......................................................................................... 113 5.3. Dodawanie děwiÚków do gry Sudoku ........................................................................... 116 5.4. Przewijamy ......................................................................................................... 120 Rozdziaï 6. Przechowywanie danych lokalnych ............................................. 121 6.1. Dodawanie opcji do aplikacji Sudoku .......................................................................... 121 6.2. Kontynuowanie przerwanej gry .................................................................................... 123 6.3. ZapamiÚtywanie bieĝÈcej pozycji ................................................................................. 125 6.4. Uzyskiwanie dostÚpu do wewnÚtrznego systemu plików ................................................. 127 6.5. Uzyskiwanie dostÚpu do kart SD ................................................................................. 128 6.6. Przewijamy ......................................................................................................... 129 CzÚĂÊ III Ponad podstawami ........................................................131 Rozdziaï 7. PodïÈczenie do Ăwiata .................................................................... 133 7.1. PrzeglÈdanie za pomocÈ intencji .................................................................................. 134 7.2. SieÊ z widokami .......................................................................................................... 138 Spis treĂci  7 7.3. Od obiektów JavaScript do obiektów Java i odwrotnie ................................................... 142 7.4. Korzystanie z usïug sieciowych .................................................................................... 149 7.5. Przewijamy ......................................................................................................... 161 Rozdziaï 8. Umiejscawianie i wyczuwanie ...................................................... 163 8.1. Lokacja, lokacja, lokacja .............................................................................................. 164 8.2. Ustawmy czujniki na maksimum .................................................................................. 170 8.3. Widok z lotu ptaka ...................................................................................................... 174 8.4. Przewijamy ......................................................................................................... 179 Rozdziaï 9. ZaprzÚganie bazy SQL do pracy ..................................................... 181 9.1. Wprowadzenie do bazy danych SQLite ....................................................................... 182 9.2. JÚzyk SQL dla poczÈtkujÈcych .................................................................................... 183 9.3. Witaj, bazo danych ..................................................................................................... 185 9.4. WiÈzanie danych ........................................................................................................ 192 9.5. Stosowanie klasy ContentProvider ............................................................................... 195 9.6. Implementacja klasy ContentProvider ........................................................................... 198 9.7. Przewijamy ......................................................................................................... 200 Rozdziaï 10. Trójwymiarowa grafika w Ărodowisku OpenGL ....................... 201 10.1. Zrozumienie grafiki 3D ............................................................................................. 201 10.2. Poznajemy Ărodowisko OpenGL ............................................................................... 202 10.3. Utworzenie programu korzystajÈcego ze Ărodowiska OpenGL ..................................... 204 10.4. Renderowanie scenerii .............................................................................................. 206 10.5. Budowanie modelu ................................................................................................... 210 10.6. ¥wiatïa, kamera, … .................................................................................................. 212 10.7. Akcja! ...................................................................................................................... 214 10.8. Nakïadanie tekstury .................................................................................................. 215 10.9. A kuku! ................................................................................................................... 218 10.10. Pomiar pïynnoĂci .................................................................................................... 219 10.11. Przewijamy ..................................................................................................... 221 CzÚĂÊ IV NastÚpne pokolenie .......................................................223 Rozdziaï 11. WielodotykowoĂÊ .......................................................................... 225 11.1. WstÚp do zagadnienia wielodotykowoĂci ..................................................................... 225 11.2. Tworzenie aplikacji Dotyk ......................................................................................... 227 11.3. Zrozumienie zdarzeñ zwiÈzanych z dotykiem .............................................................. 230 11.4. Konfigurowanie procesu transformacji obrazu ............................................................. 233 11.5. Implementacja gestu przewijania ................................................................................ 234 11.6. Implementacja gestu rozsuwania ................................................................................ 235 11.7. Przewijamy ....................................................................................................... 237 8  Hello, Android Rozdziaï 12. Trzy… dwa… jeden… start .......................................................... 239 12.1. Witaj, widĝecie ......................................................................................................... 239 12.2. Aktywna tapeta ........................................................................................................ 248 12.3. Przewijamy ....................................................................................................... 259 Rozdziaï 13. Napisz raz, testuj wszÚdzie ......................................................... 261 13.1. Panie i Panowie, wïÈczamy emulatory ........................................................................ 262 13.2. Tworzenie aplikacji dostosowanej do wielu wersji ........................................................ 263 13.3. Ewoluowanie wraz z interfejsami API ........................................................................ 265 13.4. Parada bïÚdów ......................................................................................................... 271 13.5. Wszystkie ekrany duĝe i maïe .................................................................................... 273 13.6. Instalowanie aplikacji na karcie SD ............................................................................ 274 13.7. Przewijamy ....................................................................................................... 276 Rozdziaï 14. Publikowanie aplikacji w serwisie Android Market ................ 277 14.1. Przygotowanie .......................................................................................................... 277 14.2. Podpisywanie ........................................................................................................... 279 14.3. Publikowanie ............................................................................................................ 280 14.4. Aktualizowanie ......................................................................................................... 281 14.5. Koñcowe przemyĂlenia .............................................................................................. 282 Dodatki ...........................................................................................285 Dodatek A JÚzyki i interfejsy API Ărodowiska Java kontra systemu Android ................................................................ 287 A.1. Podzestaw jÚzykowy ................................................................................................... 287 A.2. Podzbiór biblioteki standardowej ................................................................................ 289 A.3. Biblioteki pochodzÈce od niezaleĝnych wydawców ....................................................... 291 Dodatek B Bibliografia ....................................................................................... 293 Skorowidz ............................................................................................................ 295 Rozdziaï 5. Multimedia S wego czasu firma Apple wyprodukowaïa seriÚ telewizyjnych reklam, na których widzimy sylwetki ludzkie tañczÈce obïÚdnie w rytm muzyki generowanej przez iPoda1. WïaĂnie taki rodzaj podekscytowania chcemy wywoïaÊ w uĝytkownikach naszych aplikacji2. Dodanie muzyki, efektów děwiÚkowych oraz filmów wideo moĝe spra- wiÊ, ĝe nasza aplikacja stanie siÚ intensywniejsza oraz bardziej pociÈgajÈca niĝ w przy- padku „suchej” aplikacji, zawierajÈcej sam tekst i grafikÚ. W tym rozdziale nauczymy siÚ dodawaÊ pliki multimediów do naszej aplikacji. Nie chcemy, aby uĝytkownicy wykonywali jakieĂ tañce-poïamañce na ulicy, jeĝeli jednak od- powiednio przygotujemy aplikacjÚ, wywoïamy przynajmniej uĂmiech na ich twarzach. 5.1. Odtwarzanie děwiÚku Dookoïa panuje mroczna i niespokojna noc… Rozlega siÚ gwizdek sÚdziego i wszyscy ruszajÈ… Kibice szalejÈ, gdy druĝyna Anwil Wïocïawek w ostatniej sekundzie zdobywa przewagÚ rzutem za trzy punkty… DziÚki děwiÚkom otrzymujemy wskazówki dotyczÈce danego otoczenia oraz dostosowuje- my emocje do zdarzeñ. Uznajmy děwiÚki za kolejny sposób na wtargniÚcie do gïowy uĝytkownika. Podobnie jak w przypadku grafiki sïuĝÈcej do przekazywania pewnych informacji uĝytkownikowi, děwiÚki pozwalajÈ wzmocniÊ i zwiÚkszyÊ wyrazistoĂÊ danych. 1 Polscy czytelnicy mogÈ siÚ zapoznaÊ z jednÈ reklamÈ tej z serii na stronie http://www.youtube.com/ watch?v=NlHUz99l-eo — przyp. tïum. 2 PomijajÈc fakt, ĝe osoby, które ukoñczyïy 8. rok ĝycia, nie mogÈ wyginaÊ ciaïa w ukazany na reklamie sposób… poza momentami, gdy moje dzieci zïoĂliwie umieszczajÈ jaszczurkÚ w moich… cóĝ, taka maïa dygresja. 108  CzÚĂÊ II • Podstawy Androida Android obsïuguje proces przetwarzania děwiÚków i muzyki poprzez klasÚ MediaPlayer, znajdujÈcÈ siÚ w pakiecie android.media3. Wypróbujmy teraz prosty przykïad, w którym děwiÚk zostanie odtworzony po naciĂniÚciu przycisku na klawiaturze lub podkïadce kierunkowej. Rozpoczynamy od utworzenia projektu za pomocÈ nastÚpujÈcych parametrów, wprowa- dzanych w oknie dialogowym New Android Project: Project name: Audio Build Target: Android 2.2 Application name: Audio Package name: org.przyklad.audio Create Activity: Audio Min SDK Version: 8 BÚdzie nam teraz potrzebnych kilka děwiÚków do odtwarzania. Dla naszego przykïadu stworzyïem wïasne děwiÚki za pomocÈ aplikacji Rejestrator děwiÚku (Start/Wszystkie Programy/Akcesoria/Rozrywka/Rejestrator děwiÚku) oraz niedrogich sïuchawek z mikrofo- nem. Po ustawieniu odpowiedniego poziomu gïoĂnoĂci nagraïem kaĝdy plik, wybraïem opcje Plik/Zapisz jako…, nastÚpnie kliknÈïem przycisk Zmieñ… i wybraïem format, który bÚdzie akceptowany przez Androida (rysunek 5.1). Na serwerze ftp wydawnictwa Helion znaj- dziemy wszystkie wygenerowane przeze mnie děwiÚki oraz dziaïajÈcy kod ěródïowy aplikacji. Rysunek 5.1. Efekty děwiÚkowe zapisujemy w formacie zrozumiaïym dla systemu Android Skopiujmy pliki děwiÚkowe do katalogu res/raw naszego nowego projektu. Jak pamiÚtamy z podrozdziaïu 2.4, „Korzystanie z zasobów” (strona 44), sam proces wklejenia pliku do katalogu res powoduje automatyczne stworzenie jego symbolu wewnÈtrz klasy R. Po sko- piowaniu plików drzewo katalogów naszego projektu powinno przypominaÊ zrzut za- prezentowany na rysunku 5.2. 3 http://d.android.com/guide/topics/media Rozdziaï 5. • Multimedia  109 Rysunek 5.2. Pliki děwiÚkowe kopiujemy do katalogu res/raw naszego projektu Nadszedï teraz czas na zapeïnienie aktywnoĂci Audio danymi. Najpierw zadeklarujemy pole nazwane mp, w którym bÚdzie przechowywana instancja klasy MediaPlayer. W przy- padku naszego programu tylko jedna instancja klasy MediaPlayer bÚdzie aktywna w danym momencie. Audio/src/org/przyklad/audio/Audio.java package org.przyklad.audio; import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Bundle; import android.view.KeyEvent; public class Audio extends Activity { private MediaPlayer mp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); 110  CzÚĂÊ II • Podstawy Androida setVolumeControlStream(AudioManager.STREAM_MUSIC); } } Metoda setVolumeControlStream() informuje system, ĝe po wciĂniÚciu przycisku zwiÚk- szania lub zmniejszania gïoĂnoĂci przez uĝytkownika w trakcie dziaïania aplikacji, powi- nien zostaÊ zaktualizowany poziom gïoĂnoĂci muzyki i innych elementów multimedialnych tego programu, a nie sygnaïu dzwonka. Musimy teraz zaczÈÊ przechwytywaÊ zdarzenia dotyczÈce naciskania przycisków oraz odtwarzaÊ stosowne děwiÚki. Dokonujemy tego poprzez przesïoniÚcie metody Activity. ´onKeyDown(). Audio/src/org/przyklad/audio/Audio.java Wiersz 1 @Override - public boolean onKeyDown(int kodKlaw, KeyEvent zdarzenie) { - int idZas; - switch (kodKlaw) { 5 case KeyEvent.KEYCODE_DPAD_UP: - idZas = R.raw.gora; - break; - case KeyEvent.KEYCODE_DPAD_DOWN: - idZas = R.raw.dol; 10 break; - case KeyEvent.KEYCODE_DPAD_LEFT: - idZas = R.raw.lewo; - break; - case KeyEvent.KEYCODE_DPAD_RIGHT: 15 idZas = R.raw.prawo; - break; - case KeyEvent.KEYCODE_DPAD_CENTER: - case KeyEvent.KEYCODE_ENTER: - idZas = R.raw.enter; 20 break; - case KeyEvent.KEYCODE_A: - idZas = R.raw.a; - break; - case KeyEvent.KEYCODE_S: 25 idZas = R.raw.s; - break; - case KeyEvent.KEYCODE_D: - idZas = R.raw.d; - break; 30 case KeyEvent.KEYCODE_F: - idZas = R.raw.f; - break; - default: - return super.onKeyDown(kodKlaw, zdarzenie); 35 } - - // Zwalnia zasoby wczeĂniejszej instancji MediaPlayer - if (mp != null) { - mp.release(); Rozdziaï 5. • Multimedia  111 40 } - - // Tworzy nowÈ instancjÚ MediaPlayer do odtwarzania děwiÚku - mp = MediaPlayer.create(this, idZas); - mp.start(); 45 - // Wskazuje na to, ĝe dany klawisz zostaï obsïuĝony - return true; - } Na pierwszym etapie omawiana metoda wybiera zasób w oparciu o wciĂniÚty klawisz. NastÚpnie w wierszu 39. wywoïujemy metodÚ release(); zatrzymuje ona aktualnie od- twarzane děwiÚki oraz zwalnia wszelkie zasoby powiÈzane z instancjÈ klasy MediaPlayer. Jeĝeli zapomnimy to zrobiÊ, program zostanie samoistnie zamkniÚty (wiÚcej informacji znajdziemy w ramce). W wierszu 43. wykorzystujemy metodÚ create() do utworzenia nowej instancji klasy MediaPlayer, przy okazji uĝywamy wybranego zasobu děwiÚkowego, a nastÚpnie wywoïu- jemy metodÚ start() do rozpoczÚcia odtwarzania. Metoda start() dziaïa w sposób asyn- chroniczny, zatem program wraca do wykonywania dalszej czÚĂci kodu, bez wzglÚdu na dïugoĂÊ trwania děwiÚku. Jeĝeli chcemy zostaÊ powiadomieni o zakoñczeniu odtwarzania, moĝemy uĝyÊ metody setOnCompletionListener(). Gdy coĂ pójdzie nie tak Osoby zajmujÈce siÚ programowaniem multimediów odkryjÈ szybko, ĝe klasa MediaPlayer potrafi byÊ narowistÈ bestiÈ. W nowszych wersjach klasa ta zostaïa znacznie usprawniona, ciÈgle jednak potrafi zawiesiÊ aplikacjÚ z najdrobniejszego powodu. JednÈ z przyczyn takiego zachowania klasy MediaPlayer jest jej natyw- noĂÊ, gdy na jej powierzchni znajduje siÚ cienka warstwa Ărodowiska Java. Na- tywny kod odtwarzacza zostaï zoptymalizowany pod kÈtem wydajnoĂci, nie kon- troli bïÚdów. Na szczÚĂcie silne zabezpieczenia procesów linuksowych w Androidzie znakomicie zapobiegajÈ wszelkim uszkodzeniom w przypadku zawieszenia aplikacji. Emulator (lub urzÈdzenie fizyczne) oraz inne aplikacje bÚdÈ dziaïaïy normalnie. Uĝytkownik bÚdzie jedynie Ăwiadkiem zamkniÚcia pechowej aplikacji oraz prawdopodobnie ujrzy okno dialogowe zawierajÈce komunikat o bïÚdzie. Jednakĝe na etapie tworzenia aplikacji posiadamy dostÚp do o wiele bogatszych informacji diagnostycznych, pomagajÈcych okreĂliÊ, co siÚ staïo. W dzienniku systemowym Androida zostanÈ umieszczone komunikaty i tropy, które moĝemy przeglÈdaÊ za pomocÈ widoku LogCat lub polecenia adb logcat (wiÚcej infor- macji na ten temat zostaïo zawartych w podrozdziale 3.10, „Usuwanie bïÚdów”, na stronie 73). 112  CzÚĂÊ II • Podstawy Androida Jasiu pyta... Jakie formaty děwiÚkowe sÈ obsïugiwane przez system Android? Sytuacja prezentuje siÚ nastÚpujÈco: pewne formaty sÈ obsïugiwane wyïÈcznie na papierze, inne na emulatorze, a jeszcze inne na urzÈdzeniach fizycznych. W wersji papierowej Android obsïuguje nastÚpujÈce formaty plików (ma siÚ to zmieniÊ wraz z nowymi wersjami platformy):  WAV (nieskompresowana modulacja PCM),  AAC (format stosowany w iPodach firmy Apple, niechroniony),  MP3 (MPEG-3),  WMA (ang. Windows Media Audio),  AMR (kodek odpowiedzialny za sygnaï mowy),  OGG (format firmy Vorbis)4,  MIDI (instrumenty). W rzeczywistoĂci zauwaĝyïem, ĝe tylko formaty OGG, WAV i MP3 dziaïajÈ dobrze na emulatorze, a zatem jedynie takie rodzaje plików mogÚ zalecaÊ do stosowania w procesie tworzenia aplikacji. Wydaje siÚ, ĝe natywnym formatem děwiÚkowym w Androidzie jest 16-bitowy děwiÚk stereo o czÚstotliwoĂci próbkowania 44,1 kHz. Jednak pliki WAV speïniajÈce wspomniane wymagania zajmujÈ olbrzymiÈ iloĂÊ miejsca, dlatego powinniĂmy pozostaÊ przy plikach OGG i MP3 (mono w przy- padku mowy, stereo dla muzyki). Pliki OGG najlepiej siÚ sprawdzajÈ w przy- padku krótkich děwiÚków, na przykïad efektów děwiÚkowych w grach. Trzymajmy siÚ z daleka od niestandardowych czÚstotliwoĂci, na przykïad 8 kHz, poniewaĝ artefakty pojawiajÈce siÚ w czasie próbkowania bardzo deformujÈ děwiÚk. Najlepsze rezultaty osiÈgniemy przy czÚstotliwoĂciach 11 kHz, 22 kHz i 44,1 kHz. PamiÚtajmy, ĝe chociaĝ telefon moĝe posiadaÊ malutki gïoĂniczek, wielu uĝytkowników bÚdzie podïÈczaïo sïuchawki (tak jak w przypadku iPoda), lepiej wiÚc, ĝeby byïy sïyszane děwiÚki w wysokiej jakoĂci. Jeĝeli uruchomimy teraz program i wciĂniemy któryĂ ze zdefiniowanych klawiszy (na przy- kïad Enter lub Ărodkowy przycisk podkïadki kierunkowej), powinniĂmy usïyszeÊ děwiÚk. Jeĝeli z gïoĂników nie wydobywa siÚ ĝaden děwiÚk, sprawděmy, czy mamy wïÈczone gïoĂniki (nie ĂmiaÊ siÚ), lub zajrzyjmy do komunikatów widoku LogCat. Jeĝeli uruchomili- Ămy aplikacjÚ na urzÈdzeniu nieposiadajÈcym klawiatury fizycznej, podkïadki kierun- kowej lub manipulatora kulkowego, wciĂnijmy i przytrzymajmy przycisk Menu, dopóki nie pojawi siÚ klawiatura dotykowa. 4 http://www.vorbis.com Rozdziaï 5. • Multimedia  113 Jasiu pyta... Jakie formaty wideo moĝemy oglÈdaÊ na Androidzie? Poniĝej prezentujÚ oficjalnie obsïugiwane formaty:  MP4 (format MPEG-4 o niskiej szybkoĂci transmisji),  H.263 (3GP),  H.264 (AVC). W przypadki wersji 1.5 systemu Android zalecanym formatem plików wideo jest H.263, poniewaĝ obsïuguje go kaĝda platforma sprzÚtowa oraz jest wzglÚdnie wydajny pod kÈtem kodowania/dekodowania. Wykazuje on równieĝ kompaty- bilnoĂÊ z innymi urzÈdzeniami, na przykïad z iPhonem. Do konwersji z jednego formatu wideo na inny moĝemy stosowaÊ program QuickTime Pro5. W celu za- oszczÚdzenia miejsca uĝywajmy w miarÚ niskiej rozdzielczoĂci i prÚdkoĂci transmi- sji, nie przesadzajmy jednak, gdyĝ moĝemy zupeïnie utraciÊ akceptowalnÈ ja- koĂÊ obrazu. Zauwaĝmy, ĝe w niektórych przypadkach efekt koñcowy moĝe brzmieÊ, jakby byï prze- rywany lub opóěniany. W takim wypadku sprawděmy inne formaty (na przykïad OOG zamiast MP3) oraz mniejszÈ prÚdkoĂÊ transmisji. Moĝemy równieĝ zbadaÊ zastosowanie klasy SoundPool, która jawnie obsïuguje kilka jednoczesnych strumieni děwiÚkowych. W wersji Android 1.0 byïa ona peïna bïÚdów oraz sïabo udokumentowana, jednak od wersji 1.5 wydaje siÚ byÊ caïkiem stabilna. NaszÈ kolejnÈ sztuczkÈ bÚdzie odtworzenie filmiku za pomocÈ jednej linijki kodu. 5.2. Odtwarzanie plików wideo Obraz wideo to coĂ wiÚcej niĝ zbiór zdjÚÊ wyĂwietlanych kolejno po sobie. Skïada siÚ na niego równieĝ děwiÚk, który musi byÊ ĂciĂle zsynchronizowany z poszczególnymi klatkami. Klasa MediaPlayer obsïuguje pliki wideo w taki sam sposób, z jakim mieliĂmy do czy- nienia w przypadku samego děwiÚku. Jedyna róĝnica polega tu na koniecznoĂci utwo- rzenia klasy Surface, na której odtwarzacz bÚdzie rysowaï klatki. Do kontroli odtwa- rzania uĝywamy metod start() i stop(). 5 http://www.apple.com/quicktime/pro 114  CzÚĂÊ II • Podstawy Androida Nie zamierzam jednak pokazywaÊ jeszcze jednego przykïadu zawierajÈcego klasÚ MediaPlayer, poniewaĝ istnieje ïatwiejsza metoda wstawiania plików wideo do aplikacji: klasa VideoView. Aby zademonstrowaÊ jej dziaïanie, stwórzmy za pomocÈ poniĝszych parametrów nowy projekt, zatytuïowany Wideo: Project name: Wideo Build Target: Android 2.2 Application name: Wideo Package name: org.przyklad.wideo Create Activity: Wideo Min SDK Version: 8 Zmieñmy ukïad graficzny (res/layout/main.xml) na nastÚpujÈcy: Wideow1/res/layout/main.xml ?xml version= 1.0 encoding= utf-8 ? FrameLayout xmlns:android= http://schemas.android.com/apk/res/android android:layout_width= fill_parent android:layout_height= fill_parent VideoView android:id= @+id/wideo android:layout_height= wrap_content android:layout_width= wrap_content android:layout_gravity= center / /FrameLayout Teraz otwórzmy plik Wideo.java i zmieñmy metodÚ onCreate() w poniĝszy sposób: Wideow1/src/org/przyklad/wideo/Wideo.java package org.przyklad.wideo; import android.app.Activity; import android.os.Bundle; import android.widget.VideoView; public class Wideo extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Wypeïnia widok danymi zasobu setContentView(R.layout.main); VideoView wideo = (VideoView) findViewById(R.id.wideo); // Wczytuje i uruchamia film wideo.setVideoPath( /data/przykladowewideo.3gp ); wideo.start(); } } Metoda setVideoPath() otwiera dany plik, dopasowuje go do pojemnika przy jedno- czesnym zachowaniu proporcji oraz rozpoczyna odtwarzanie. Rozdziaï 5. • Multimedia  115 Musimy teraz umieĂciÊ jakiĂ plik, który chcielibyĂmy obejrzeÊ. W tym celu wpisujemy nastÚpujÈce polecenie: C: adb push c:kodprzykladowewideo.3gp /data/przykladowewideo.3gp 1649 KB/s (369870 bytes in 0.219s) Plik przykladowewideo.3gp znajdziemy w pakiecie zawierajÈcym kody ěródïowe uĝy- wane w tej ksiÈĝce, moĝemy równieĝ stworzyÊ swój wïasny plik. Zaprezentowany tu ka- talog (/data) zostaï wprowadzony wyïÈcznie w celach pokazowych i w rzeczywistoĂci nie powinien byÊ uĝywany do przechowywania plików multimedialnych. Sposób ten dziaïa wyïÈcznie w emulatorze, poniewaĝ w przypadku urzÈdzeñ fizycznych uĝywany katalog jest chroniony. Zauwaĝmy, ĝe Android raczej nie przejmuje siÚ rozszerzeniem wstawianego pliku. Mo- ĝemy równieĝ umieszczaÊ i pobieraÊ pliki za pomocÈ widoku File Explorer w perspektywie Android, uwaĝam jednak, ĝe do takich zadañ lepiej nadaje siÚ wiersz poleceñ. Jeszcze jedna sprawa: chcielibyĂmy, aby odtwarzany film zajÈï caïy ekran, wïÈcznie z pa- skiem tytuïowym oraz paskiem stanu. Aby to umoĝliwiÊ, jedynÈ koniecznÈ czynnoĂciÈ jest zdefiniowanie odpowiedniego motywu w pliku AndroidManifest.xml: Videov1/AndroidManifest.xml ?xml version= 1.0 encoding= utf-8 ? manifest xmlns:android= http://schemas.android.com/apk/res/android package= org.przyklad.wideo android:versionCode= 1 android:versionName= 1.0 application android:icon= @drawable/icon android:label= @string/app_name activity android:name= .Wideo android:label= @string/app_name android:theme= @android:style/Theme.NoTitleBar.Fullscreen intent-filter action android:name= android.intent.action.MAIN / category android:name= android.intent.category.LAUNCHER / /intent-filter /activity /application uses-sdk android:minSdkVersion= 3 android:targetSdkVersion= 8 / /manifest Gdy juĝ przygotujemy wszystkie pliki, po uruchomieniu programu powinniĂmy ujrzeÊ i usïyszeÊ filmik (rysunek 5.3). Sprawděmy, czy plik wideo bÚdzie odtwarzany za- równo w orientacji pionowej, jak i poziomej. Voilà! Natychmiastowa, kinematograficzna przyjemnoĂÊ. Usprawnijmy teraz nieco naszÈ grÚ Sudoku, dodajÈc klimatycznÈ muzykÚ. 116  CzÚĂÊ II • Podstawy Androida Rysunek 5.3. DziÚki klasie VideoView wstawianie plików wideo nie stanowi problemu 5.3. Dodawanie děwiÚków do gry Sudoku W tym podrozdziale wykorzystamy caïÈ zdobytÈ dotychczas wiedzÚ na temat multime- diów i dodamy do naszej gry Sudoku muzykÚ odtwarzanÈ w tle. Jeden utwór bÚdzie graï na ekranie tytuïowym, a inny usïyszymy w trakcie wïaĂciwej rozgrywki. W ten sposób nie tylko siÚ dowiemy, w jaki sposób odtwarzaÊ muzykÚ, lecz równieĝ rozpatrzymy pewne zagadnienia zwiÈzane z cyklem ĝycia. Aby dodaÊ muzykÚ do ekranu powitalnego, wystarczy, ĝe przesïonimy nastÚpujÈce metody w klasie Sudoku: Sudokuw3/src/org/przyklad/sudoku/Sudoku.java @Override protected void onResume() { super.onResume(); Muzyka.play(this, R.raw.glowna); } @Override protected void onPause() { super.onPause(); Muzyka.stop(this); } Rozdziaï 5. • Multimedia  117 Jasiu pyta... Dlaczego filmik zostaje zrestartowany po zmianie orientacji wyĂwietlacza? Android domyĂlnie zakïada, ĝe napisana aplikacja nie rozróĝnia trybów orientacji ekranu. Aby wyĂwietliÊ ewentualne zmiany w zasobach, system niszczy i od pod- staw odtwarza aktywnoĂÊ. Oznacza to, ĝe metoda onCreate() zostaje ponownie wywoïana, a to z kolei znaczy, iĝ plik wideo zostaje uruchomiony od poczÈtku (tak jakby caïy przykïad byï pisany na bieĝÈco). Takie zachowanie nie jest kïopotliwe w przypadku 90 programów, wiÚc wiÚkszoĂÊ programistów nie musi siÚ nim przejmowaÊ. W gruncie rzeczy jest to caïkiem przydatny sposób na przetestowanie cyklu ĝycia aplikacji oraz kodu odpowiedzialnego za zapis/odczyt jej stanu (podrozdziaï 2.2, „To ĝyje!”, na stro- nie 38). Jednakĝe istnieje kilka rozwiÈzañ dla ambitnych, pozwalajÈcych na zop- tymalizowanie przejĂcia pomiÚdzy trybem pionowym a poziomym. Najprostszym rozwiÈzaniem jest implementacja metody onRetainNonConfiguration ´Instance() wewnÈtrz aktywnoĂci, dziÚki czemu pewne dane zostanÈ zachowane podczas wywoïañ metod onDestroy() i onCreate(). W nowym wystÈpieniu aktyw- noĂci wykorzystujemy wtedy metodÚ getLastNonConfigurationInstance() do odzy- skania tych danych. Moĝemy przechowywaÊ wszelkie rodzaje informacji, nawet referencje do bieĝÈcej intencji oraz uruchomionych wÈtków. Bardziej zaawansowanÈ metodÈ jest zastosowanie wïaĂciwoĂci android:config ´Changes= wewnÈtrz pliku AndroidManifest.xml w taki sposób, aby Android wiedziaï, którymi zmianami moĝemy siÚ zajÈÊ. Na przykïad, jeĂli ustawimy jej war- toĂÊ keyboardHidden|orientation, w momencie obrócenia klawiatury aktywnoĂÊ nie zostanie zniszczona i odtworzona. Zamiast tego system wywoïa onConfiguration ´Changed(Configuration) z zaïoĝeniem, ĝe mamy sytuacjÚ pod kontrolÈ6. JeĂli przypomnimy sobie, co przeczytaliĂmy w podrozdziale 2.2, „To ĝyje!” (strona 38), metoda onResume() zostaje wywoïana w momencie, gdy aktywnoĂÊ jest gotowa do interakcji z uĝytkownikiem. Jest to odpowiedni moment, aby uruchomiÊ muzykÚ, zatem wstawiamy tutaj wywoïanie Muzyka.play(). Wkrótce zdefiniujemy klasÚ Muzyka. OdnoĂnik R.raw.glowna dotyczy pliku res/raw/glowna.mp3. Pliki děwiÚkowe znajdziemy w projekcie Sudokuw3, który moĝna pobraÊ wraz z innymi przykïadowymi projektami z serwera ftp wydawnictwa Helion. 6 Szczegóïowe informacje znajdziemy na stronie http://d.android.com/reference/android/app/Activity.html# Configuration-Changes. 118  CzÚĂÊ II • Podstawy Androida Jasiu pyta... Czy nie powinniĂmy wprowadziÊ muzyki do usïugi przetwarzanej w tle? Nie poĂwiÚciliĂmy zbyt wiele miejsca klasie Service, mogliĂmy siÚ jednak na niÈ na- tknÈÊ w róĝnych przykïadach wykorzystujÈcych muzykÚ, które moĝna znaleěÊ w in- ternecie. Zasadniczo klasa Service sïuĝy do rozpoczÚcia procesu przetwarzanego w tle, który bÚdzie dziaïaï nawet po zamkniÚciu aktywnoĂci. Usïugi sÈ podobne do demonów systemu Linux (ale nie identyczne). Jeĝeli tworzymy odtwarzacz muzyki ogólnego przeznaczenia i chcemy, aby muzyka leciaïa podczas przeglÈdania poczty lub stron sieci Web, to zastosowanie klasy Service bÚdzie jak najbardziej na miejscu. Jednakĝe w wiÚkszoĂci przypadków wolimy, aby muzyka zakoñczyïa siÚ w momen- cie zamkniÚcia programu, nie ma wiÚc potrzeby, aby implementowaÊ klasÚ Service. Metoda onPause() zostaïa wprowadzona w formie „wsparcia” dla metody onResume(). Android wstrzymuje bieĝÈcÈ aktywnoĂÊ tuĝ przed rozpoczÚciem kolejnej, wiÚc w przypadku naszej gry po wciĂniÚciu przycisku Nowa Gra aktywnoĂÊ Sudoku zostanie wstrzymana, natomiast bÚdziemy Ăwiadkami uruchomienia aktywnoĂci Gra. Równieĝ w przypadku naciĂniÚcia klawisza cofania lub powrotu do ekranu startowego zostanie wywoïana metoda onPause(). We wszystkich wymienionych tu miejscach chcemy, aby nie graïa muzyka tytuïowa, zatem wywoïujemy Muzyka.stop() w metodzie onPause(). Przeprowaděmy podobnÈ operacjÚ w aktywnoĂci Gra: Sudokuw3/src/org/przyklad/sudoku/Gra.java @Override protected void onResume() { super.onResume(); Muzyka.play(this, R.raw.gra); } @Override protected void onPause() { super.onPause(); Muzyka.stop(this); } Ciekawostka o grze Sudoku IstniejÈ dziesiÈtki odmian gry w Sudoku, jednak ĝadna nie zdoïaïa zdobyÊ popular- noĂci porównywalnej z wersjÈ oryginalnÈ. Jedna z takich modyfikacji umoĝliwia grÚ na polu o rozmiarach 16×16 pól, danymi wejĂciowymi sÈ natomiast cyfry zapisywa- ne w systemie szesnastkowym. Inna wersja, znana jako Gattai 5 lub Samurai Sudoku, zawiera piÚÊ plansz o rozmiarach 9×9 pól, które ïÈczÈ siÚ ze sobÈ w naroĝnikach. Rozdziaï 5. • Multimedia  119 W porównaniu do klasy Sudoku wprowadziliĂmy tu inny zasób děwiÚkowy, R.raw.gra (res/raw/gra.mp3). Ostatnim fragmentem naszej děwiÚkowej ukïadanki jest klasa Muzyka, w której bÚdzie zarzÈdzana klasa MediaPlayer, wymagana do odtwarzania muzyki: Sudokuv3/src/org/example/sudoku/Music.java Wiersz 1 package org.przyklad.sudoku; - - import android.content.Context; - import android.media.MediaPlayer; 5 - public class Muzyka { - private static MediaPlayer mp = null; - - /** Zatrzymuje stary utwór i rozpoczyna odtwarzanie nowego */ 10 public static void play(Context kontekst, int zasob) { - stop(kontekst); - mp = MediaPlayer.create(kontekst, zasob); - mp.setLooping(true); - mp.start(); 15 } - - /** Zatrzymuje odtwarzanie muzyki */ - public static void stop(Context context) { - if (mp != null) { 20 mp.stop(); - mp.release(); - mp = null; - } - } 25 } Metoda play() najpierw wywoïuje metodÚ stop(), dziÚki czemu wszelkie odtwarzanie bieĝÈcej muzyki zostaje zatrzymane. NastÚpnie za pomocÈ metody MediaPlayer.create() zostaje utworzona nowa instancja klasy MediaPlayer, której zostaje przekazany kontekst oraz identyfikator zasobów. Po utworzeniu odtwarzacza wprowadzamy opcjÚ zapÚtlenia muzyki i w koñcu jÈ odtwa- rzamy. Metoda start() od razu pozwala aplikacji na przetwarzanie dalszej czÚĂci kodu. RozpoczynajÈca siÚ od wiersza 18. metoda stop() jest bardzo prosta. Po sprawdzeniu, czy rzeczywiĂcie jest dostÚpna instancja klasy MediaPlayer, wywoïujemy metody stop() i release(). O dziwo, metoda MediaPlayer.stop() zatrzymuje odtwarzanie muzyki. Z kolei metoda release() zwalnia zasoby systemowe powiÈzane z odtwarzaczem. Poniewaĝ sÈ to natywne zasoby, nie moĝemy czekaÊ, aĝ zwykïy proces odzyskiwania pamiÚci Ărodowi- ska Java wykona za nas to zadanie. Pozostawienie w spokoju metody release() stanowi Ăwietny sposób na niespodziewane zawieszenie aplikacji (nie to, ĝeby mi siÚ kiedykolwiek coĂ takiego przydarzyïo; czytelnicy powinni jednak o tym pamiÚtaÊ). 120  CzÚĂÊ II • Podstawy Androida Teraz nadeszïa pora na najlepszÈ czÚĂÊ — zagrajmy w Sudoku po wprowadzeniu tych wszystkich zmian. Przetestujmy aplikacjÚ w kaĝdy moĝliwy sposób, na przykïad przecho- dzÈc pomiÚdzy róĝnymi aktywnoĂciami, wciskajÈc przyciski cofania i ekranu startowego na róĝnych etapach gry, obracajÈc wyĂwietlacz, i tak dalej. WïaĂciwe zarzÈdzanie cyklem ĝycia stanowi czasami nie lada kïopot, jednak uĝytkownicy aplikacji doceniÈ wïoĝony w niÈ wysiïek. 5.4. Przewijamy W niniejszym rozdziale zajÚliĂmy siÚ tematykÈ odtwarzania plików audio i wideo za po- mocÈ pakietu Android SDK. Nie omawialiĂmy procesu rejestracji multimediów, poniewaĝ wiÚkszoĂÊ programów nie wykorzystuje tej funkcji, jeĝeli jednak chcemy stworzyÊ pro- gram bÚdÈcy pod tym wzglÚdem wyjÈtkowym, moĝemy zajrzeÊ do dokumentacji klasy MediaRecorder7. W rozdziale 6., „Przechowywanie danych lokalnych” (strona 121), poznamy kilka pro- stych metod zachowywania danych aplikacji pomiÚdzy jej wywoïaniami. Jeĝeli ta wiedza jest nam niepotrzebna, moĝemy od razu przejĂÊ do rozdziaïu 7., „PodïÈczenie do Ăwiata” (strona 133), aby dowiedzieÊ siÚ co nieco o dostÚpie do sieci. 7 http://d.android.com/reference/android/media/MediaRecorder.html Skorowidz 3GP, 113 alfa A AAC, 12, 35, 112 adapter SimpleCursorAdapter, 193 Adobe AIR, 182 adres serwera proxy, 26 ADT, 26, 54 Android Development Toolkit, 24 aktywnoĂÊ, 12, 13, 42, 52, 65, 79, 83, 84, miara przezroczystoĂci, 78 algorytm dzielenia czasu, 288 time slicing, 288 Amazon, 133 AMD, 203 AMR kodek odpowiedzialny za sygnaï mowy, 112 Android, 11, 12, 13, 15 BASE, 262 BASE_1_1, 262 Content Guidelines, 281 Cupcake, 14, 239, 262, 269, 271, Maintenance Release 1, 15, 248 MR1, 15 272, 273 Device Dashboard, 15 Donut, 14, 262 Eclair, 14, 262, 270 ECLAIR_0_1, 262 ECLAIR_MR1, 262 Eclipse, 49 FroYo, 15, 29, 262 kod, 143 Ajax, 174 akcelerometr, 172 aktualizacja ĝÈdanie, 156 122, 250 Audio, 109 Browser, 138 gïówna, 63, 204 koñczenie, 75 referencja, 168 rejestracja, 43 Translator, 157 uruchamianie, 63 zamkniÚcie, 75 zdefiniowanie, 63 296  Hello, Android Android Market, 14, 17, 32, 38, 264, 276, 277, 278, 279, 280, 281 Licensing, 280 publikowanie, 277, 280 serwis, 281 wersja darmowa, 283 pïatna, 282 narzÚdzia programistyczne, 22 pakiet startowy, 23 platforma, 14 przestrzeñ nazw XML, 55 SDK, 21, 24, 29, 42, 171, 279 Components, 23 Starter Package, 23 skïadniki, 23 software development kit, 21 wersja, 14, 261 1.0, 262 1.1, 15, 262 1.5, 14, 36, 113, 135, 227, 245, 262, 270, 271 1.6, 14, 225, 227, 262, 268 2.0, 14, 226, 262, 265, 266 2.0.1, 262 2.1, 15, 225, 248, 262, 274 2.2, 15, 29, 165, 175, 262, 264, 274, 276 animacja, 217 wektorowa, 12 antyaliasing, 12 API, 37 Apple, 22, 35, 107 iPhone, 182 MacBook, 173 Safari, 35 architektura ARM, 12 build target, 175 docelowa, 175 komponentowa, 12 sprzÚtowa, 45 x86, 12 ARGB, 78 ASCII, 54 AT T, 21 atrybut android:installLocation=, 275 android:permission=, 249 android:scaleType=, 229 android:theme=, 229 android:versionCode=, 278 android:versionName=, 278, 282 AVC, 35, 113 AVD Android Virtual Device, 28 architektura systemowa, 34 B baza danych, 181 db4o, 200 instrukcja modyfikacji, 184 zapytañ, 184 Java SQL, 290 SQL, 12, 33, 35, 182 SQLite, 13, 181, 182, 183, 184, 185, 187, 189, 190, 200, 290 licencja, 183 biblioteka graficzna, 79, 89, 105 Java 5 SE, 287 5 Standard Edition, 287 natywna, 34, 37 OpenGL ES, 77 podzbiór, 289 WebKit, 35 zawarta w Androidzie, 37 BlackBerry, 11 Skorowidz  297 bloczek budulcowy, 42 Bluetooth, 173 bïÈd, 272 alert obiektu JavaScript, 145, 149 aplikacja nie posiada zdefiniowanych wymagañ dotyczÈcych poziomu interfejsu API, 264 Application does not specify an API level requirement, 264 brak urzÈdzenia AVD, 28 ClassNotFoundException, 176 connection error, 25 dwa palce, 235 HTTPS SSL, 24 kompilacji, 65 komunikat, 57, 111 dziennika, 73 strona internetowa jest niedostÚpna, 141 usuwanie, 73 wielodotykowoĂÊ, 227 zawieszenie, 137 Bornstein Dan, 36 BTS stacje bazowe sieci komórkowych, 164 C C, 34 C++, 34 Carmack John, 203 certyfikat, 45, 129 cieniowanie, 209 shader, 209 Compiz, 35 CSS Cascade Style Sheets, 67 kaskadowe arkusze stylów, 67 cykl ĝycia, 13, 37, 40, 43 aktywnoĂci, 40 procesu, 40 czujnik Apple MacBook, 173 faïszywy, 173 tablica, 172, 179 testowanie, 172 TYPE_ACCELEROMETER, 171 TYPE_LIGHT, 171 TYPE_MAGNETIC_FIELD, 171 TYPE_ORIENTATION, 171, 172 TYPE_PRESSURE, 171 TYPE_PROXIMITY, 171 TYPE_TEMPERATURE, 171, 172 wartoĂci, 172 wywoïanie, 171 D Dalvik, 12, 287, 288 virtual machine, 36 VM, 36, 289 wirtualna maszyna, 36 dane globalne, 43 model, 192 wejĂciowe, 90 wiÈzanie, 192 DB2, 183 DDMS Dalvik Debug Monitor Service, 170 debuger, 73, 75 debugowanie, 31 delegacja, 266 demon, 43 Developer Console, 280, 282 dialer telefoniczny, 38 synonim jednostki dp, 59 dip, 59 DLL Data Definition Language, 183 jÚzyk definiowania danych, 183 dokowanie, 14 298  Hello, Android DOM, 290 dostawca treĂci, 37, 42, 43 dp density-independent pixels, 59 piksele niezaleĝne od gÚstoĂci, 59 dpi, 59 dots per inch, 59 punkty na cal, 59 Draw 9-patch, 242, 243 DTD schemat, 56 dziennik děwiÚk systemu, 231 dodawanie, 116 format, 112 przetwarzanie, 108 rejestrator, 108 E ADT, 24 Cupcake, 29 Donut, 29 Eclair, 29 FroYo, 29 Helios, 23 IDE for Java Developers, 22, 25 IDE for Java EE Development, 25 kompilacja, 28 konfiguracja, 24, 54 SDK, 22 wersja 3.3.1, 22 3.5, 24 3.6, 23 WST, 25 wtyczka, 24 Eclipse, 22, 51, 64, 65, 74, 75, 138, 170, 179, 182, 187, 240, 246, 252, 264, 265, 267, 268, 279 emulator, 13, 28, 32, 52, 60, 66, 74, 111, 128, 170, 172, 173, 262, 263, 264, 277, 279 edytor XML, 65 graficzny, 54 egzekutor, 150 ekran aktywnoĂci, 52 dotkniÚcia, 174 dotykowy, 90 gÚstoĂÊ, 59, 274 pikseli, 274 orientacja, 274 powitalny, 51 rodzaj, 274 rozdzielczoĂÊ, 274 rozmiar, 274 startowy, 39, 225, 239, 244, 246, 257, 258, 259 tapeta, 257 tïo, 255 emulacja czujnika, 173 Androida, 31 em15, 271 em16, 264, 265 telefonu, 21, 31 wielodotykowoĂÊ, 231 F fabrykacja, 266 Firefox, 35 Flash, 12 format binarny, 55 FPS funkcja frames per second, 219 Copy Protection, 280 window.alert(), 146 Skorowidz  299 G H H.263, 35, 113 H.264, 35, 113 AVC, 12 Hipp Richard, 182 hotspot wifi, 164 HTC, 21 HTML, 35, 143, 151 ïÈcza, 146 odwrócony ukoĂnik, 63 tabela, 55 widok, 67 znacznik, 63 I id Software, 203 IDE, 13, 21, 22 programistyczne, 13 identyfikator dla przycisku, 59 URI, 196, 197, 198 uĝytkownika, 45, 129 zasobu, 59 in cale, 59 rozmiar zmierzony miarkÈ, 59 instalacja instrukcja narzÚdzi programistycznych, 21 case, 92 Eclipse IDE Pocket Guide, 32 importu, 64, 69, 72 integrated development environment, 13 zintegrowane Ărodowisko gadĝet, 38 Garns Howard, 50, 83 Gennick Jonathan, 200 gest przeciÈgniÚcie, 226 przewijania implementacja, 234 rodzaje, 226 rozsuwanego przybliĝania, 226 rozsuwania implementacja, 235 stukniÚcie, 226 GestureWorks, 237 gÚstoĂÊ, 14 Goetz Brian, 162 Google, 11, 15, 21, 36, 43, 133, 150, 160, 172, 174, 175, 178, 247, 272, 274, 275, 279, 280 APIs, 175 Checkout, 280 Chrome, 35, 133 GWT, 287 I/O, 274 Maps, 173, 174, 175, 176 Tïumacz, 151, 153, 158 Web Toolkit, 287 GPS, 12, 45, 163, 164, 165, 179 dostawca, 170 Global Positioning System, 164 odbiornik, 165 procesor, 164, 172 sygnaï, 164 grafika 3D, 201 dwuwymiarowa, 12, 13, 35, 77, 201 OpenGL, 290 trójwymiarowa, 13, 35, 77, 201, 202, 204, 221 biblioteka, 213 Intel, 203 intencja, 42, 43 anonimowa, 65 nazwana, 65 prywatna, 65 publiczna, 65 IntencjaPrzeglÈdarki, 134, 136, 139, 141 300  Hello, Android interfejs API, 32, 43, 265, 274, 287, 289 1.1, 14 1.5, 14 AIDL, 195 Android Interface Definition Language, 195 bazy danych, 290 Google Maps, 175, 279 jÚzyk definiowania interfejsu w systemie Android, 195 niestandardowy, 43 OpenGL E 2.0, 15 poziom 1, 268 3, 264 5, 268 8, 264 preferencji, 121, 123 raportów, 227 tïumacza, 150 BaseColums, 187 Callable, 150 graficzny, 80 komputerowy, 59 LocationListener, 168 OnClickListener, 65 publiczny, 37 Runnable, 150 sensoryczny, 171, 173 sieciowy, 134 Ărodowiska Java, 149 skalowanie, 59 uĝytkownika, 13, 17, 35, 39, 40, 41, 42, 44, 52, 72, 136, 137, 144, 147, 149, 154, 155, 156, 159, 225, 289 aktualizowanie, 159 ekran, 52 elementy, 138 projektowanie, 49 ViewBinder, 200 instalowanie narzÚdzi, 21 na karcie SD, 274 interpolator animacji, 95 iPad, 273 iPhone, 11, 112, 113, 203, 273 iPod, 107, 112 J Java, 15, 52, 111 2 Platform Standard Edition 5.0, 289 5, 150, 187 5.0+, 22 biblioteki, 36 Concurrency in Practice, 162 Dalvik VM, 36 JDK, 22 jÚzyk, 11, 12, 13 ME, 37 Mobile Edition, 11, 37 SE, 14, 37 Standard Edition, 14, 37 5.0, 289 standardowy zasób, 44 wersja 6, 288 7, 288 wtyczka, 23 JavaScript, 147, 161 bazy danych Java SQL, 290 JDK SE 6.0, 22 JetBrains IDEA, 22 jÚzyk, 274 C#, 13 DDL, 183 HTML, 51 HTML5, 14 Java, 13, 287, 288, 289 JavaScript, 143, 174, 266, 287 Ruby, 266 Skorowidz  301 SQL, 183, 184, 200 XML, 45, 51, 52, 55 analiza skïadni, 290, 291 Java Runtime Environment, 22 JRE JSON JavaScript Object Notation, 161 JSR, 209, 239 Java Specification Request, 203 K Kanaï alfa, 219 karta odczyt danych, 129 SD, 29, 128, 129, 274, 275, 276 Secure Digital, 29, 128 wirtualna, 29, 128 katalog assets, 145 gen., 53 instalacyjny pakietu SDK, 23 nazywanie, 44 prywatny aplikacji, 129 res, 44, 53, 108, 145 roboczy, 25 tools, 23 tymczasowy, 23 Khronos Group, 203 klasa, 52 Activity, 40, 192, 198 Adapter, 155 AlarmManager, 247 AlertDialog, 63 android.R, 54 AppWidgetProvider, 243 Bundle, 126, 127 Canvas, 77, 79 Color, 77, 78 ContentProvider, 195, 196, 198 implementacja, 198 Context, 43, 127 Cursor, 191 Dialog, 63 Direction.CW, 80 Drawable, 80, 81, 82 dziedziczenie, 63, 187 Engine, 257 ExecutorService, 150 FontMetrics, 89 Future, 150 GLSurfaceView, 205, 208, 256 Handler, 147 HttpURLConnection, 161 ImageView, 85, 233, 271, 272 IntencjaPrzegladarki, 136 Intent, 65, 125, 139 klawiatura, 97, 100 ListActivity, 192, 193, 194 LocationListener, 166 LocationManager, 166 Log, 73 MapActivity, 177 MapView, 175, 176, 177, 178 MediaPlayer, 108, 109, 111, 113, 114, 119 MediaRecorder, 179 MenuInflater, 69 MotionEvent, 265, 266, 267 MyLocationOverlay, 178 nadrzÚdna, 127 Paint, 79 Path, 80 PathEffect, 80 PreferenceActivity, 122 R, 44, 53, 54, 108 rejestrowanie, 71 RendererGL, 206, 214, 255, 258 renderowania, 206 ResourceManager, 78 SensorManager, 171 setImageMatrix(), 271 siatka, 85 SQLiteOpenHelper, 185 302  Hello, Android klasa Surface, 113, 257 TextView, 67 Thread, 150 Translator, 153, 158, 193 UriMatcher, 199 VideoView, 114 View, 79, 126, 139 WallpaperService, 250, 257 WebView, 67, 138, 139, 141 wewnÚtrzna, 65 klawiatura, 84, 96, 97, 98, 99, 100 klauzula BY, 190 GROUP, 190 HAVING, 190 WHERE, 190 dostÚpnoĂÊ, 274 dotykowa, 14 numeryczna, 60 obracanie, 117 programowa, 135 klawisz /, 135 .com, 135 Ctrl+F11, 60, 263 Enter, 93, 137, 141 Esc, 66 Fn+Ctrl+F11, 60 kierunkowe, 62 Menu, 122 NumLock, 263 wirtualny, 14 klucz, 44 kod Maps API, 279 bajtowy, 287 dwuliterowy jÚzyka, 274 HTML, 149 Java, 51, 78, 84, 143, 147 JavaScript, 143, 147, 148 jawny, 11, 21, 33 kodek, 12 kolor multimediów, 35 odpowiedzialny za sygnaï mowy, 112 konstruktora, 186 MCC, 274 metody, 168 MNC, 274 odtwarzacza, 111 pisanie, 51 poĂredni, 36 wywoïujÈcy, 64 XML, 51, 54 ěródïowy, 11, 16, 33 Androida, 272 bibliotek, 287 alfa, 78 ARGB, 78 definiowanie, 58 RGB, 78 skïadowe, 78 kompas, 175 kompatybilnoĂÊ, 14, 29 kompilacja, 44, 268 kodu, 96 kompilator, 44 (aapt), 55 Java, 287 zasobów, 55 komunikacja Inter-Process Communication, 195 IPC, 195 miÚdzyprocesowa, 195 komunikat widoku LogCat, 112 konstruktor, 185 obiektu, 193 widoku, 84 kontroler kulkowy, 90 Wii, 173 Skorowidz  303 kontrolka Button, 135 EditText, 135 LinearLayout, 140 MapView, 174, 175, 177 Spinner, 152 standardowa, 177 TableLayout, 62 TableRow, 152 TextView, 165, 188 WebView, 142, 144 kreator New Android Project, 134 widĝetów, 240 ksztaït, 81 shape, 81 kursor poïoĝenie, 125 pozycja, 126 wyboru, 86 L Lee Doug, 150 licencja publiczna GNU, 200 liczby staïoprzecinkowe, 210 zmiennoprzecinkowe, 210 127, 203 LiMo, 11 Mobile, 11 powïoka, 34 system plików, 34 lista jÚzyków, 152 ostatnio aktualizowanych programów, 282 Recently Updated, 282 wyboru, 72 Locale, 163 Linux, 21, 23, 25, 33, 34, 36, 38, 45, metoda ’ ïÈcze Upload Application, 280 M Mac OS X, 21, 22, 23, 25, 26, 182, 203 macierz transformacji, 233 manifest, 66 manipulator kulkowy, 62, 91 trackball, 91 mapa bitowa, 81 bitmap, 81 Mattson Justin, 274 mechanizm synchronizacji, 288 menedĝer aktywnoĂci, 37, 39 lokacji, 37 powiadomieñ, 37 powierzchni, 35 zasobów, 37, 54 kontekstowe, 68 lista, 68 opcji, 68 w jÚzyku XML, 69 menu Activity.onKeyDown(), 110 Activity.onSaveInstanceState(), 126 addJavascriptInterface(), 142, 143 addPreferencesFromResource(), 71 close(), 289 Context.getExternalFilesDir(), 129 create(), 111 createSnapshot(), 142 deleteFile(), 127 dismiss(), 100 enableCompass(), 178 enableMyLocation(), 178 fileList(), 127 304  Hello, Android metoda finalize(), 289 findViewById(), 64, 177 finish(), 75 getAction(), 232, 267 getBestProvider(), 167 getColor(), 78 getColumnIndexOrThrow(), 191 getController(), 177 getHeight(), 84 getIntExtra(), 125 getLastNonConfigurationInstance(), 117 getLong(), 191 getMenuInflater(), 69 getPointerCount(), 233, 266, 267, 269 getPointerId(int), 267 getReadableDatabase(), 190 getResources(), 78 getSettings(), 142 getString(), 191 getSystemService(), 166, 171 getWidth(), 84, 105 getWritableDatabase(), 189, 197 getX(), 233, 267, 270 getX(int), 267, 269 getY(), 233, 267, 270 getY(int), 267, 269 glColor4f(), 210 glColor4x(), 210 glDisable(), 207 glEnable(), 207 Handler.post(), 159 insertOrThrow(), 189 invalidate(), 92, 94 isValid(), 99 lista, 141 loadData(), 142 loadDataWithBaseURL(), 142 loadUrl(), 140, 142, 143, 148, 149 Log.d(), 74 Log.e(), 74 Log.i(), 74 Log.v(), 74 Log.w(), 74 Log.wtf(), 74 managedQuery(), 198 MediaPlayer.create(), 119 moveToNext(), 191 obliczUzytePola(), 84 onClick(), 65, 72, 125 onCommand(), 259 onCreate(), 52, 64, 81, 84, 114, 117, 125, 129, 136, 137, 140, 154, 166, 186, , 189, 188, 197, 250, 254 onCreate(Bundle), 40 onDestroy(), 41, 117 onDraw(), 79, 84, 86, 90, 92, 94, 117 onSaveInstanceState(), 40, 127 onSaveInstanceState(Bundle), 41 onSensorChanged(), 171 onSizeChanged(), 84, 86, 91 onStart(), 40, 250 onStartCommand(), 250 onStatusChanged(), 168 onStop(), 41 onSurfaceChanged(), 207, 256 onSurfaceCreated(), 214, 255 onSurfaceDestroyed(), 256 onTouch(), 229, 230 104, 123 onDrawFrame(), 208, 214, 220, 258 onKeyDown(), 91, 92, 93, 99 onLocationChanged(), 168 onOffsetsChanged(), 258 onOptionsItemSelected(), 69 onPause(), 40, 42, 118, 124, 167, 171, 205 onProviderDisabled(), 168 onProviderEnabled(), 168 onRestart(), 41 onRestoreInstanceState(), 127 onResume(), 40, 117, 118, 167, 205 onRetainNonConfigurationInstance(), Skorowidz  305 onTouchEvent(), 93 onTrackballEvent(), 91 onVisbilityChanged(), 257 onXX(), 40 openFileInput(), 128 openFileOutput(), 128 Paint.setColor, 79 play(), 119, 123 postTranslate(), 234 query(), 190 rawQuery(), 190 registerListener(), 171 release(), 111, 119 RendererGL.onSurfaceCreated(), 214 requestLocationUpdates(), 167 runOnFirstFix(), 178 setBackgroundResource(), 81 setBuiltInZoomControls(), 177, 226 setContentView(), 52, 64, 137 setDownloadListener(), 142 setId(), 127 setItems(), 73 setOnClickListener(), 64, 65, 149 setOnCompletionListener(), 111 setSatellite(), 177 setVideoPath(), 114 setVolumeControlStream(), 110 setWebChromeClient(), 142, 147 setWebViewClient(), 142 start(), 111, 113, 119 startActivity(), 83, 137 startManagingCursor(), 190 stop(), 119 stopLoading(), 142 super.onDestroy(), 255 superklasy, 252 Ărodowiska JavaScript, 143 terminate(), 289 verifyPointerIndex(), 269 View.onDraw(), 79 window.alert(), 148 wywoïana z klasy, 127 Microsoft, 174, 203 MIDI instrumenty, 112 MIME, 199 mm milimetry, 59 rozmiar zmierzony miarkÈ, 59 Document Object Model, 143 DOM, 143 obiektowy model dokumentu, 143 model moduï payment processor, 280 przetwarzania opïat, 280 Motorola, 21 motyw, 67 Mozilla Firefox, 182 MP3, 12, 35 MPEG-3, 112 MP4 MPEG-4, 35 MPEG-4 o niskiej szybkoĂci transmisji, 113 MySQL, 183 N Native Development Kit, 209 nawigacja dostÚpnoĂÊ, 274 nazwa pakietu, 52 NDK, 36 NetBeans, 22 NinePatch, 81 Nintendo DS, 170 Wii, 163 NKD Native Development Toolkit, 36 zestaw narzÚdzi umoĝliwiajÈcych tworzenie bibliotek natywnych, 36 306  Nokia, 203 Number Place, 83 Nvidia, 203 O obiekt Button, 144 Cursor, 193 Drawable, 242 Handler, 147 Java, 142, 143, 147 JavaScript, 142, 143 JButton, 51 JFrame, 51 LocationListener, 167 MapController, 177 nasïuchujÈcy, 73 POJO, 147 powiÈzany z kodem JavaScript, 143 R.layout.main, 52 Runnable, 147 SimpleCursorAdapter, 193, 200 Spinner, 155, 157, 158 Surface, 256 TextView, 144, 147 WebChromeClient, 147 WebSettings, 142 window.android, 146 XmlHttpRequest, 174 obraz NinePatch, 242 PNG, 242 obszar odnoĂnik extraData, 100 do danych, 54 R.raw.glowna, 117 OGG format firmy Vorbis, 112 okno dialogowe New Project, 240 informacyjne, 62 Hello, Android Open Handest Alliance, 11, 21 OpenGL, 12, 33, 35, 77, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 214, 216, 217, 218, 220, 248, 256 dla osadzonych systemów, 203 ES, 105, 201, 203, 205, 209 ES 1.0, 209 ES 2.0, 209 for Embedded Systems, 203 interakcja, 254 opcje Ărodowiska, 207, 208 wersja 1.3, 209 OpenIntents, 173 Oracle, 22, 183 orientacja panoramiczna, 60 pionowa, 60 pozioma, 60, 62 ostrosïup widzenia view frustum, 202 oĂwietlenie, 212 ambient, 213 diffuse, 213 dookolne, 213 kierunkowe, 213 rozproszone, 213 specular, 213 tekstura, 215 Owens Mike, 200 P pakiet .apk, 279 android.graphics, 77, 105 android.media, 108 android.view.View, 65 com.google.android.maps, 178 Java nazewnictwo, 278 java.lang.management, 289 java.net.HttpURLConnection, 153 Skorowidz  307 java.util.concurrent, 150, 288, 290 javax.security.auth.kerberos, 290 javax.security.sasl, 290 nieobsïugiwany, 290 org.przyklad.dotyk, 267 pamiÚÊ flash, 127 karta SD, 15 zewnÚtrzna, 15 parametr array.length, 102 trud, 124 PayPal, 280 PHP, 182 platforma Android, 13 Java, 22 mobilna, 11, 21 projektowa, 11 plik .apk, 279, 282 .class, 36 .dex, 36 .jar, 36 AndroidManifest.xml, 32, 45, 57, 65, 67, 71, 75, 84, 115, 117, 141, 151, 165, 175, 198, 229, 241, 245, 249, 264, 275, 278, 282 bazy danych, 182 Dotyk.java, 228 děwiÚkowy, 109 indeks.html, 145, 146, 149 klasy, 36 main.xml, 52, 54 MP3, 112 OGG, 112 OpenGL.java, 204 pamiÚci flash, 121 R.java, 53, 65 strings.xml, 57 tablice.xml, 155 ukïadu graficznego, 144, 175 WAV, 112 wewnÚtrzny system, 127 wideo, 113, 115, 117 wklejanie do katalogu, 108 XML, 54, 81, 84, 95, 127 zasobu, 53, 56 XML, 78 zewnÚtrzny system, 129 ěródïowy, 16 pïynnoĂÊ frames per second, 219 poczta email, 38 podkïadka kierunkowa, 112 pole Activity, 240 widzenia, 202 polecenie adb, 182 adb logcat, 74, 111 powïoka overlay, 178 poziom level, 81 proces linuksowy, 40 program Translator, 193 usïuga, 250 programowanie równolegïe, 150 projektowanie deklaracyjne, 51, 52 interfejs uĝytkownika, 49 proceduralne, 51, 52 za pomocÈ deklaracji, 51 przeciÈgniÚcie, 226 przedrostek @android, 67 przeglÈdarka sandbox, 143 PrzeglÈdarkaLokalna, 134, 144, 146, 148 przycisk cofania, 39, 75 308  Hello, Android PSP PlayStation Portable, 219 pt 1/72 cala, 59 punkty, 59 px piksele, 59 punkty na ekranie, 59 QuickTime Pro, 113 Q R refleksja, 266 renderowanie, 206, 208 Re-Translate Pro, 280 rozdzielczoĂÊ, 59 wymiary niezaleĝne, 59 rzutowanie, 201 S Safari, 133 Samsung, 203 SDK, 264, 265 Setup, 23 wersja zestawu, 274 Sensor Simulator, 173 sieÊ bezprzewodowa, 164 Web, 134, 138, 140, 141, 143, 148 z widokami, 138 Silicon Graphics, 202 silnik bazy danych, 35 przeglÈdarki, 35, 140, 148 SQL, 184 klasa, 200 skala scale, 81 Skype, 182 piksele niezaleĝne od skali, 59 scale-independent pixels, 59 Server, 183 Structured Query Language, 182 strukturalny jÚzyk zapytañ, 182 ACTION_POINTER_DOWN, 266 synchronized, 288 sïowo kluczowe smartfon, 12 Solaris, 182 Sony, 203 sp, 59 SQL PlayStation, 170 Portable, 219 SQLite, 35 staïa stan instancji, 41, 42 proces zachowania, 42 przerwania, 42 state, 81 trwaïy, 40 zakoñczenia, 42 zatrzymania, 42 zmiany, 40 sterownik USB, 24 stukniÚcie, 225, 226 Swing, 51 Symbian, 11, 182, 203 symulator, 173 synchronizacja, 14 system szesnastkowy, 54 ¥ Ărodowisko uruchomieniowe, 36, 37 typ, 83 wartoĂci zmiennopozycyjnych, 172 Skorowidz T tablica, 102, 288 tabliczka dotykowa,
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Hello, Android. Programowanie na platformę Google dla urządzeń mobilnych. Wydanie III
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: