android receptury andrec


Tytuł oryginału: Android Cookbook
Tłumaczenie: Tomasz Walczak
ISBN: 978-83-246-6269-2
© 2013 Helion S.A.
Authorized Polish translation of the English edition of Android Cookbook, 1st Edition, ISBN
9781449388416 © 2012 O Reilly Media Inc.
This translation is published and sold by permission of O Reilly Media, Inc., which owns or controls all
rights to publish and sell the same.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval system,
without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodÄ… kserograficznÄ…,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądz towarowymi ich
właścicieli.
Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były kompletne
i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym
ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi również
żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/andrec
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Pliki z przykładami omawianymi w książce można znalezć pod adresem:
ftp://ftp.helion.pl/przyklady/andrec.zip
Printed in Poland.
" Kup książkę " Księgarnia internetowa
" Poleć książkę " Lubię to! Nasza społeczność
" Oceń książkę
Spis tre ci
Przedmowa ............................................................................................................................. 13
1. Podstawowe informacje .............................................................................................. 19
1.1. Wprowadzenie  podstawowe informacje 19
1.2. Nauka Javy 19
1.3. Tworzenie aplikacji  Witaj, wiecie z poziomu wiersza polece 21
1.4. Tworzenie aplikacji  Witaj, wiecie w rodowisku Eclipse 24
1.5. Konfigurowanie rodowiska IDE w systemie Windows pod k tem
programowania aplikacji na Android 29
1.6. Cykl ycia w Androidzie 35
1.7. Instalowanie plików .apk w emulatorze za pomoc narz dzia ADB 36
1.8. Instalowanie aplikacji w emulatorze za pomoc sklepu SlideME 38
1.9. Wspó u ytkowanie klas Javy z innym projektem rodowiska Eclipse 39
1.10. Wskazywanie bibliotek z implementacj funkcji zewn trznych 41
1.11. Wykorzystanie przyk adów z pakietu SDK do u atwienia sobie pracy 43
1.12. Aktualizowanie pakietu SDK Androida 46
1.13. Wykonywanie zrzutów w emulatorze i urz dzeniu z Androidem 52
1.14. Prosty przyk adowy program do odliczania wstecznego 55
1.15. Program Tipster  kalkulator napiwków na Android 57
2. Projektowanie udanych aplikacji ................................................................................. 73
2.1. Wprowadzenie  projektowanie udanych aplikacji na Android 73
2.2. Obs uga wyj tków 76
2.3. Obiekt Application w Androidzie jako singleton 79
2.4. Zachowywanie danych po zmianie orientacji ekranu 81
2.5. Monitorowanie poziomu baterii w urz dzeniach z Androidem 83
2.6. Tworzenie ekranów powitalnych w Androidzie 84
2.7. Projektowanie aplikacji na potrzeby konferencji, BarCampu,
hackathonu lub instytucji 88
2.8. Wykorzystanie narz dzia Google Analytics w aplikacjach na Android 90
5
Kup książkę Poleć książkę
2.9. Prosta latarka 92
2.10. Dostosowywanie aplikacji na telefony z Androidem do tabletów 94
2.11. Preferencje obowi zuj ce przy pierwszym uruchomieniu aplikacji 95
2.12. Formatowanie czasu i daty na potrzeby wy wietlania 97
2.13. Kontrolowanie danych wej ciowych za pomoc odbiorników KeyListener 99
2.14. Tworzenie kopii zapasowej danych aplikacji na Android 102
2.15. Stosowanie wskazówek zamiast okien podpowiedzi 108
3. Testy ............................................................................................................................. 111
3.1. Wprowadzenie  testy 111
3.2. Programowanie sterowane testami w Androidzie 111
3.3. Konfigurowanie urz dze AVD na potrzeby testowania aplikacji 112
3.4. Testowanie aplikacji w wielu urz dzeniach za pomoc chmury 121
3.5. Tworzenie i stosowanie projektu testowego 122
3.6. Rozwi zywanie problemów z awariami aplikacji 125
3.7. Debugowanie z wykorzystaniem instrukcji Log.d i okna LogCat 128
3.8. Automatyczne otrzymywanie raportów o b dach od u ytkowników
za pomoc mechanizmu BugSense 129
3.9. Korzystanie z lokalnego dziennika czasu wykonania do analizowania
b dów i innych sytuacji 131
3.10. Odtwarzanie scenariuszy cyklu ycia aktywno ci na potrzeby testów 134
3.11. Rozwijanie p ynnie dzia aj cych aplikacji za pomoc narz dzia
StrictMode 139
3.12. Korzystanie z programu Monkey 140
3.13. Wysy anie komunikatów tekstowych i przekazywanie wywo a
mi dzy urz dzeniami AVD 142
4. Komunikacja wewn trz- i mi dzyprocesowa .......................................................... 145
4.1. Wprowadzenie  komunikacja wewn trz- i mi dzyprocesowa 145
4.2. Obs ugiwanie strony internetowej, numeru telefonu lub innych
elementów za pomoc intencji 146
4.3. Wysy anie e-maili z poziomu widoku 147
4.4. Wysy anie e-maili z za cznikami 150
4.5. Przekazywanie a cuchów znaków za pomoc instrukcji Intent.putExtra() 151
4.6. Pobieranie danych z aktywno ci podrz dnej do aktywno ci g ównej 152
4.7. Podtrzymywanie dzia ania us ugi w trakcie wy wietlania innych aplikacji 155
4.8. Wysy anie i odbieranie komunikatów rozg oszeniowych 157
4.9. Uruchamianie us ugi po ponownym uruchomieniu urz dzenia 158
4.10. U ywanie w tków do tworzenia szybko reaguj cych aplikacji 159
4.11. Korzystanie z klasy AsyncTask do wykonywania operacji w tle 160
4.12. Przesy anie komunikatów mi dzy w tkami za pomoc kolejki w tków
aktywno ci i komponentu obs ugi 166
6 Spis tre ci
Kup książkę Poleć książkę
4.13. Tworzenie androidowej wersji kalendarza Epoch
(napisanego w HTML-u i JavaScripcie) 168
5. Dostawcy tre ci ............................................................................................................175
5.1. Wprowadzenie  dostawcy tre ci 175
5.2. Pobieranie danych z dostawcy tre ci 175
5.3. Pisanie dostawcy tre ci 177
5.4. Pisanie zdalnej us ugi na Android 179
6. Grafika ......................................................................................................................... 185
6.1. Wprowadzenie  grafika 185
6.2. Stosowanie niestandardowej czcionki 185
6.3. Wy wietlanie obracaj cego si sze cianu za pomoc specyfikacji
OpenGL ES 187
6.4. Sterowanie obracaj cym si sze cianem 191
6.5. Odr czne rysowanie p ynnych linii 194
6.6. Robienie zdj za pomoc intencji 198
6.7. Robienie zdj za pomoc klasy android.media.Camera 200
6.8. Skanowanie kodu kreskowego lub kodu QR za pomoc programu
Google ZXing 204
6.9. Wy wietlanie diagramów i wykresów za pomoc klasy AndroidPlot 207
6.10. Tworzenie ikony do androidowego launchera za pomoc programu
Inkscape 208
6.11. atwe tworzenie ikon do launchera za pomoc programu Paint.NET
i grafik z serwisu OpenClipArt.org 215
6.12. Korzystanie z plików NinePatch 221
6.13. Tworzenie wykresów na strony HTML5 za pomoc biblioteki RGraph 224
6.14. Dodawanie prostej animacji rastrowej 228
6.15. Przybli anie obrazu za pomoc gestów dotykowych 230
7. Graficzny interfejs u ytkownika ...............................................................................235
7.1. Wprowadzenie  interfejs GUI 235
7.2. Poznawanie i przestrzeganie wytycznych tworzenia
interfejsu u ytkownika 236
7.3. Obs uga zmian konfiguracji przez oddzielenie widoku od modelu 238
7.4. Tworzenie przycisku i odbiornika klikni 241
7.5. Pi sposobów na do czanie odbiornika zdarze 242
7.6. Stosowanie kontrolek CheckBox i RadioButton 246
7.7. Wzbogacanie projektu interfejsu u ytkownika za pomoc
przycisków graficznych 249
7.8. Udost pnianie listy rozwijanej z opcjami za pomoc klasy Spinner 251
7.9. Obs uga d ugiego klikni cia 253
7.10. Wy wietlanie pól tekstowych TextView i EditText 254
Spis tre ci 7
Kup książkę Poleć książkę
7.11. Ograniczanie warto ci pola EditText za pomoc atrybutów
oraz interfejsu TextWatcher 255
7.12. Kontrolka AutoCompleteTextView 257
7.13. Zape nianie kontrolki AutoCompleteTextView za pomoc zapyta
do bazy SQLite 259
7.14. Przekszta canie pól tekstowych w pola na has o 260
7.15. Zmiana klawisza Enter na Next na klawiaturze programowej 261
7.16. Obs uga w aktywno ci zdarze zwi zanych z klawiszami 264
7.17. Poka im gwiazdy  kontrolka RatingBar 265
7.18. Drgaj cy widok 268
7.19. Wy wietlanie dotykowych informacji zwrotnych 270
7.20. Prze czanie si mi dzy ró nymi aktywno ciami w widoku TabView 273
7.21. Tworzenie niestandardowego paska tytu u 275
7.22. Formatowanie liczb 277
7.23. Poprawne stosowanie liczby mnogiej 281
7.24. Wy wietlanie drugiego ekranu z poziomu pierwszego 283
7.25. Tworzenie ekranu wczytywania, wy wietlanego przy prze czaniu
aktywno ci 291
7.26. Zakrywanie innych komponentów za pomoc klasy SlidingDrawer 292
7.27. Otwieranie komponentu SlidingDrawer od góry do do u 295
7.28. Dodawanie do uk adu obramowania z zaokr glonymi rogami 296
7.29. Wykrywanie gestów w Androidzie 299
7.30. Tworzenie interfejsu u ytkownika w Androidzie 1.6 i nowszych
wersjach za pomoc fragmentów z Androida 3.0 305
7.31. Korzystanie z galerii zdj w Androidzie 3.0 308
7.32. Tworzenie prostego wid etu aplikacji 311
8. Alerty w interfejsach GUI  menu, okna dialogowe, komunikaty toast
i powiadomienia ......................................................................................................... 315
8.1. Wprowadzenie  alerty w interfejsach GUI 315
8.2. Tworzenie i wy wietlanie menu 316
8.3. Obs uga wyboru opcji menu 317
8.4. Tworzenie podmenu 318
8.5. Tworzenie wyskakuj cych okien dialogowych (okien z alertami) 321
8.6. Kontrolka Timepicker 322
8.7. Tworzenie obrotowego mechanizmu wybierania
(podobnego do tego z iPhone ów) 325
8.8. Tworzenie okna dialogowego z zak adkami 327
8.9. Tworzenie okna ProgressDialog 330
8.10. Tworzenie niestandardowego okna dialogowego z przyciskami,
rysunkami i tekstem 331
8.11. Klasa AboutBox do wielokrotnego u ytku 333
8 Spis tre ci
Kup książkę Poleć książkę
8.12. Modyfikowanie wygl du komunikatów toast 336
8.13. Tworzenie powiadomienia wy wietlanego na pasku stanu 337
9. GUI  kontrolka ListView ..........................................................................................343
9.1. Wprowadzenie  kontrolka ListView 343
9.2. U ywanie kontrolki ListView do tworzenia aplikacji opartych na listach 343
9.3. Tworzenie widoków  brak danych dla kontrolek ListView 347
9.4. Tworzenie zaawansowanych kontrolek ListView z rysunkami i tekstem 349
9.5. Stosowanie nag ówków sekcji w kontrolkach ListView 352
9.6. Zachowywanie pozycji w kontrolce ListView 356
9.7. Niestandardowy adapter listy 357
9.8. Obs uga zmian orientacji  od warto ci z kontrolki ListView
po wykresy w orientacji poziomej 360
10. Multimedia .................................................................................................................. 367
10.1. Wprowadzenie  multimedia 367
10.2. Odtwarzanie filmów z serwisu YouTube 367
10.3. U ywanie obiektu Gallery wraz z kontrolk ImageSwitcher 368
10.4. Rejestrowanie filmów za pomoc klasy MediaRecorder 371
10.5. Jak wykorzysta androidowy mechanizm wykrywania twarzy? 373
10.6. Odtwarzanie muzyki z pliku 376
10.7. Odtwarzanie d wi ku bez interakcji z u ytkownikiem 378
10.8. Konwersja mowy na tekst 380
10.9. Konwersja tekstu na mow 381
11. Utrwalanie danych .....................................................................................................383
11.1. Wprowadzenie  utrwalanie danych 383
11.2. Pobieranie informacji o plikach 383
11.3. Wczytywanie plików z aplikacji, a nie z systemu plików 386
11.4. Wy wietlanie zawarto ci katalogu 387
11.5. Okre lanie cznej ilo ci pami ci oraz ilo ci wolnego miejsca na karcie SD 390
11.6. Prosty sposób tworzenia aktywno ci do ustawiania preferencji
u ytkownika 390
11.7. Sprawdzanie poprawno ci ustawie 394
11.8. Zaawansowane wyszukiwanie tekstu 396
11.9. Tworzenie bazy SQLite w aplikacji na Android 401
11.10. Wstawianie danych do bazy SQLite 402
11.11. Wczytywanie warto ci z istniej cej bazy SQLite 402
11.12. Praca z datami w bazie SQLite 403
11.13. Przetwarzanie danych w formacie JSON za pomoc klasy JSONObject 406
11.14. Przetwarzanie dokumentów XML za pomoc interfejsu DOM API 407
11.15. Przetwarzanie dokumentów w formacie XML z wykorzystaniem
interfejsu XmlPullParser 409
Spis tre ci 9
Kup książkę Poleć książkę
11.16. Dodawanie danych kontaktowych 412
11.17. Wczytywanie danych kontaktowych 415
12. Aplikacje do obs ugi po cze telefonicznych .......................................................... 417
12.1. Wprowadzenie  aplikacje do obs ugi po cze telefonicznych 417
12.2. Wykonywanie operacji w momencie, gdy dzwoni telefon 418
12.3. Przetwarzanie wychodz cych po cze telefonicznych 421
12.4. Wybieranie numeru telefonu 424
12.5. Wysy anie jedno- lub wielocz ciowych wiadomo ci SMS 425
12.6. Odbieranie wiadomo ci SMS w aplikacjach na Android 428
12.7. Wysy anie wiadomo ci SMS do emulatora za pomoc okna
Emulator Control 429
12.8. Korzystanie z androidowej klasy TelephonyManager do pobierania
informacji o urz dzeniu 430
13. Aplikacje sieciowe ...................................................................................................... 441
13.1. Wprowadzenie  sie 441
13.2. Stosowanie us ug sieciowych typu RESTful 442
13.3. U ywanie wyra e regularnych do wyodr bniania informacji
z nieustrukturyzowanego tekstu 444
13.4. Przetwarzanie danych z kana ów RSS i Atom za pomoc parsera ROME 446
13.5. Korzystanie ze skrótów MD5 do przetwarzania zwyk ego tekstu 450
13.6. Przekszta canie tekstu na odno niki 451
13.7. Dost p do stron internetowych za pomoc kontrolki WebView 452
13.8. Modyfikowanie wygl du kontrolki WebView 453
14. Gry i animacje .............................................................................................................455
14.1. Wprowadzenie  gry i animacje 455
14.2. Tworzenie gier na Android za pomoc frameworku flixel-android 456
14.3. Tworzenie gry na Android za pomoc narz dzia AndEngine
(Android-Engine) 458
14.4. Przetwarzanie danych wej ciowych wprowadzonych w okre lonym czasie 464
15. Sieci spo eczno ciowe ................................................................................................467
15.1. Wprowadzenie  sieci spo eczno ciowe 467
15.2. Integrowanie aplikacji z sieciami spo eczno ciowymi za pomoc
protoko u HTTP 467
15.3. Wczytywanie chronologicznych list tweetów za pomoc formatu JSON 470
16. Lokalizacja i mapy .......................................................................................................473
16.1. Wprowadzenie  aplikacje wykorzystuj ce lokalizacj 473
16.2. Pobieranie danych o lokalizacji 473
16.3. Dost p do danych z GPS-a w aplikacjach 475
10 Spis tre ci
Kup książkę Poleć książkę
16.4. Podawanie fikcyjnych wspó rz dnych GPS w urz dzeniu 477
16.5. Geokodowanie i geokodowanie odwrotne 479
16.6. Przygotowania do korzystania z map Google a 480
16.7. Wy wietlanie aktualnej lokalizacji urz dzenia na mapach Google a 486
16.8. Wy wietlanie znacznika lokalizacji w widoku MapView 487
16.9. Wy wietlanie kilku znaczników w widoku MapView 490
16.10. Tworzenie warstw dla widoku MapView 495
16.11. Zmienianie trybów widoku MapView 496
16.12. Wy wietlanie ikony na warstwie bez korzystania z obiektów Drawable 497
16.13. Implementowanie wyszukiwania lokalizacji na mapach Google a 501
16.14. Wy wietlanie widoku MapView w kontrolce TabView 503
16.15. Obs uga d ugich klikni w widokach MapView 505
16.16. Korzystanie z map OpenStreetMap 509
16.17. Tworzenie warstw dla map OSM 511
16.18. Stosowanie skali w mapach OSM 513
16.19. Obs uga dotkni warstwy mapy OSM 514
16.20. Aktualizowanie lokalizacji na mapach OSM 516
17. Akcelerometr .............................................................................................................. 521
17.1. Wprowadzenie  czujniki 521
17.2. Wykrywanie obecno ci lub braku czujnika 521
17.3. Wykorzystywanie akcelerometru do wykrywania potrz sania
urz dzeniem 522
17.4. U ywanie akcelerometru do sprawdzania, czy ekran skierowany
jest w dó , czy w gór 526
17.5. Okre lanie u o enia telefonu z Androidem za pomoc czujnika orientacji 527
17.6. Odczyt wskaza czujnika temperatury 528
18. Bluetooth .................................................................................................................... 531
18.1. Wprowadzenie  Bluetooth 531
18.2. W czanie Bluetootha i umo liwianie wykrywania urz dzenia 532
18.3. Pod czanie urz dzenia z Bluetoothem 533
18.4. Oczekiwanie na dania po czenia Bluetooth oraz ich akceptowanie 536
18.5. Implementowanie wykrywania urz dze z Bluetoothem 537
19. Sterowanie systemem i urz dzeniem ........................................................................539
19.1. Wprowadzenie  sterowanie systemem i urz dzeniem 539
19.2. Dost p do informacji o sieci i po czeniu 539
19.3. Pobieranie informacji z pliku manifestu 540
19.4. Zmienianie trybu dzwonka telefonu na cichy, wibracje lub normalny 541
19.5. Kopiowanie tekstu i pobieranie go ze schowka 542
19.6. Powiadomienia oparte na diodach LED 544
Spis tre ci 11
Kup książkę Poleć książkę
19.7. W czanie wibracji w urz dzeniu 544
19.8. Uruchamianie polece pow oki z poziomu aplikacji 545
19.9. Okre lanie, czy dana aplikacja jest uruchomiona 546
20. Inne j zyki programowania i frameworki .................................................................549
20.1. Wprowadzenie  inne j zyki programowania 549
20.2. Uruchamianie zewn trznych, natywnych instrukcji Uniksa i Linuksa 550
20.3. Uruchamianie kodu natywnego w j zyku C lub C++ za pomoc
interfejsu JNI z pakietu NDK 551
20.4. Wprowadzenie do aplikacji Scripting Layer for Android
(SL4A; wcze niej Android Scripting Environment) 556
20.5. Tworzenie alertów za pomoc biblioteki SL4A 558
20.6. Pobieranie dokumentów Google i wy wietlanie ich w kontrolce
ListView za pomoc biblioteki SL4A 562
20.7. U ywanie kodów QR do rozpowszechniania skryptów SL4A 563
20.8. U ywanie JavaScriptu do wykorzystania wbudowanych funkcji telefonu
poprzez kontrolk WebView 566
20.9. Tworzenie aplikacji niezale nych od platformy za pomoc frameworku
PhoneGap 568
21. a cuchy znaków i internacjonalizacja ......................................................................571
21.1. Wprowadzenie  internacjonalizacja 571
21.2. Internacjonalizacja tekstu aplikacji 572
21.3. Wyszukiwanie i t umaczenie a cuchów znaków 575
21.4. Niuanse zwi zane z plikami strings.xml 577
22. Tworzenie pakietów, instalowanie, dystrybucja i sprzeda aplikacji .....................583
22.1. Wprowadzenie  tworzenie pakietów, instalowanie i dystrybucja 583
22.2. Tworzenie certyfikatu u ywanego przy podpisywaniu 583
22.3. Podpisywanie aplikacji 586
22.4. Udost pnianie aplikacji w sklepie Google Play (dawny Android Market) 587
22.5. Integrowanie sieci AdMob z aplikacj 588
22.6. Zaciemnianie i optymalizowanie kodu za pomoc ProGuarda 592
22.7. Odno niki do aplikacji ze sklepu Google Play 595
Skorowidz .............................................................................................................................599
12 Spis tre ci
Kup książkę Poleć książkę
ROZDZIA 10.
Multimedia
10.1. Wprowadzenie  multimedia
Ian Darwin
Omówienie
Android to rodowisko multimedialne. Standardowo obejmuje odtwarzacze muzyki i filmów,
a wi kszo komercyjnych urz dze obok domy lnych narz dzi obejmuje te ich bardziej
wymy lne odpowiedniki, a tak e odtwarzacze filmów z serwisu YouTube i inne podobne
aplikacje. Z receptur z tego rozdzia u dowiesz si , jak sterowa wybranymi aspektami wiata
multimediów w Androidzie.
10.2. Odtwarzanie filmów z serwisu YouTube
Marco Dinacci
Problem
Programista chce w urz dzeniu umo liwi odtwarzanie filmów z serwisu YouTube.
Rozwi zanie
Na podstawie identyfikatora URI filmu nale y utworzy obiekt Intent z akcj ACTION_VIEW
i uruchomi now aktywno .
Omówienie
Na listingu 10.1 pokazano kod potrzebny do uruchomienia filmu z serwisu YouTube za po-
moc intencji.
367
Kup książkę Poleć książkę
Aby kod z tej receptury zadzia a , w urz dzeniu u ytkownika musi by zainstalowa-
na standardowa aplikacja YouTube.
Listing 10.1. Uruchamianie filmu z serwisu YouTube za pomoc intencji
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String video_path = "http://www.youtube.com/watch?v=opZ69P-0Jbc";
Uri uri = Uri.parse(video_path);
// Ten wiersz powoduje natychmiastowe uruchomienie aplikacji YouTube (je li jest
// zainstalowana). Je eli usuniesz ten wiersz, u ytkownik zobaczy list aplikacji
// do wyboru.
uri = Uri.parse("vnd.youtube:" + uri.getQueryParameter("v"));
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
W przyk adzie podano standardowy adres URL filmu z serwisu YouTube.com. Cz on uri.get
QueryParameter("v") s u y do okre lania identyfikatora filmu na podstawie identyfikatora URI.
W przyk adzie identyfikator filmu to opZ69P-0Jbc.
10.3. U ywanie obiektu Gallery wraz z kontrolk
ImageSwitcher
Nidhin Jose Davis
Problem
Programista chce utworzy interfejs u ytkownika do przegl dania kolekcji rysunków.
Rozwi zanie
Po dany efekt mo na uzyska dzi ki zastosowaniu obiektu Gallery wraz z kontrolk Image
Switcher.
Omówienie
Mo na wykorzysta obiekt Gallery (android.widget.Gallery) i kontrolk ImageSwitcher (android.
widget.ImageSwitcher) do utworzenia eleganckiej przegl darki rysunków. Na listingu 10.2 po-
kazano uk ad dla obiektu Gallery.
Listing 10.2. Uk ad dla obiektu Gallery

android:orientation="vertical"
368 Rozdzia 10. Multimedia
Kup książkę Poleć książkę
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:id="@+id/switcher"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
android:id="@+id/gallery"
android:background="#55000000"
android:layout_width="fill_parent"
android:layout_height="60dip"
android:spacing="16px"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:gravity="center_vertical"
/>

Na listingu 10.3 pokazano, jak wykorzysta ten uk ad.
Listing 10.3. G ówna aktywno ImageBrowser z przyk adu z galeri
public class ImageBrowser extends Activity
implements AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory {
private ImageSwitcher mISwitcher;
private ArrayList allimages = new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Usuwanie paska tytu u
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
getImages();
mISwitcher = (ImageSwitcher)findViewById(R.id.switcher);
mISwitcher.setFactory(this);
// Animacja przy prze czaniu rysunków
mISwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
mISwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
Gallery gallery = (Gallery) findViewById(R.id.gallery);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemSelectedListener(this);
}
private void getImages() {
allimages.add(this.getResources().getDrawable(R.drawable.image1));
allimages.add(this.getResources().getDrawable(R.drawable.image2));
allimages.add(this.getResources().getDrawable(R.drawable.image3));
allimages.add(this.getResources().getDrawable(R.drawable.image4));
allimages.add(this.getResources().getDrawable(R.drawable.image5));
10.3. U ywanie obiektu Gallery wraz z kontrolk ImageSwitcher 369
Kup książkę Poleć książkę
allimages.add(this.getResources().getDrawable(R.drawable.image6));
allimages.add(this.getResources().getDrawable(R.drawable.image7));
allimages.add(this.getResources().getDrawable(R.drawable.image8));
allimages.add(this.getResources().getDrawable(R.drawable.image9));
}
@Override
public void onItemSelected(AdapterView arg0, View v, int position, long id) {
try{
mISwitcher.setImageDrawable(allimages.get(position));
}catch(Exception e){}
}
@Override
public void onNothingSelected(AdapterView arg0) {
// Pusta
}
@Override
public View makeView() {
ImageView i = new ImageView(this);
i.setBackgroundColor(0xFF000000);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new ImageSwitcher.LayoutParams(
ImageSwitcher.LayoutParams.FILL_PARENT,
ImageSwitcher.LayoutParams.FILL_PARENT));
return i;
}
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return allimages.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView galleryview = new ImageView(mContext);
galleryview.setImageDrawable(allimages.get(position));
galleryview.setAdjustViewBounds(true);
galleryview.setLayoutParams(new
LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
galleryview.setPadding(5, 0, 5, 0);
galleryview.setBackgroundResource(android.R.drawable.picture_frame);
return galleryview;
}
}
}
370 Rozdzia 10. Multimedia
Kup książkę Poleć książkę
10.4. Rejestrowanie filmów za pomoc klasy
MediaRecorder
Marco Dinacci
Problem
Programista chce za pomoc wbudowanej kamery rejestrowa filmy i zapisywa je na dysku.
Rozwi zanie
Nale y zarejestrowa film i zapisa go w telefonie za pomoc klasy MediaRecorder z framewor-
ku Androida.
Omówienie
Do nagrywania d wi ku i filmów s u y klasa MediaRecorder. Klasa ta ma prosty interfejs API,
poniewa jednak oparta jest na prostej maszynie stanowej, metody trzeba wywo ywa w okre-
lonej kolejno ci, tak aby unikn wyst pienia wyj tku IllegalStateException.
Utwórz now aktywno i przes o metod onCreate za pomoc kodu z listingu 10.4.
Listing 10.4. Metoda onCreate() z g ównej aktywno ci
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.media_recorder_recipe);
// Film nale y nagrywa w orientacji poziomej
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
mSurfaceView = (SurfaceView) findViewById(R.id.surfaceView);
mHolder = mSurfaceView.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mToggleButton = (ToggleButton) findViewById(R.id.toggleRecordingButton);
mToggleButton.setOnClickListener(new OnClickListener() {
@Override
// Rozpoczynanie i wstrzymywanie nagrywania filmu
public void onClick(View v) {
if (((ToggleButton)v).isChecked())
mMediaRecorder.start();
else {
mMediaRecorder.stop();
mMediaRecorder.reset();
try {
initRecorder(mHolder.getSurface());
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}
10.4. Rejestrowanie filmów za pomoc klasy MediaRecorder 371
Kup książkę Poleć książkę
Klatki z podgl dem filmu s wy wietlane w widoku SurfaceView. Do sterowania nagrywaniem
s u y przycisk, który pozwala rozpocz i wstrzyma rejestrowanie. Po zako czeniu nagrywa-
nia nale y zatrzyma prac obiektu MediaRecorder. Poniewa metoda stop resetuje stan wszyst-
kich zmiennych maszyny stanowej, wi c aby móc rozpocz rejestrowanie nast pnego filmu,
nale y zresetowa maszyn stanow i jeszcze raz wywo a metod initRecorder.
W metodzie initRecorder aplikacja konfiguruje obiekt MediaRecorder oraz aparat, co pokazano
na listingu 10.5.
Listing 10.5. Konfigurowanie obiektu MediaRecorder
/* Inicjowanie obiektu MediaRecorder. Aby obiekt dzia a poprawnie, metody
* trzeba wywo ywa w odpowiedniej kolejno ci
*/
private void initRecorder(Surface surface) throws IOException {
// Bardzo wa ne jest, aby przed wywo aniem metody setCamera odblokowa aparat.
// W przeciwnym razie podgl d b dzie niewidoczny
if(mCamera == null) {
mCamera = Camera.open();
mCamera.unlock();
}
if(mMediaRecorder == null)
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setPreviewDisplay(surface);
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
File file = createFile();
mMediaRecorder.setOutputFile(file.getAbsolutePath());
// Bez ogranicze . Nie zapomnij sprawdzi , ile wolnej pami ci jest na dysku
mMediaRecorder.setMaxDuration(-1);
mMediaRecorder.setVideoFrameRate(15);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
try {
mMediaRecorder.prepare();
} catch (IllegalStateException e) {
// Zg aszany, je li poprzednie metody nie zosta y wywo ane w odpowiedniej
// kolejno ci
e.printStackTrace();
}
mInitSuccesful = true;
}
Wa ne jest, aby przed utworzeniem obiektu MediaRecorder utworzy i odblokowa obiekt Camera.
Metody setPreviewDisplay i setCamera trzeba wywo a natychmiast po utworzeniu obiektu
MediaRecorder. Koniecznie trzeba okre li format i plik wyj ciowy. Inne opcje (je li wyst puj )
nale y ustawia w kolejno ci przedstawionej na listingu 10.5.
Obiekt MediaRecorder najlepiej jest inicjowa po utworzeniu powierzchni. Aby otrzymywa po-
wiadomienia o tym, e powierzchnia jest gotowa, aktywno jest rejestrowana jako odbiornik
SurfaceHolder.Callback. Ponadto w kodzie przes oni to metod surfaceCreated. Aplikacja wy-
wo uje w niej kod do inicjowania procesu nagrywania.
372 Rozdzia 10. Multimedia
Kup książkę Poleć książkę
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
if(!mInitSuccessful)
initRecorder(mHolder.getSurface());
} catch (IOException e) {
e.printStackTrace(); // Zastosowa lepsz obs ug b dów?
}
}
Po zako czeniu korzystania z powierzchni nale y pami ta o zwolnieniu zasobów, poniewa
Camera to obiekt wspó u ytkowany i inne aplikacje tak e mog z niego korzysta :
private void shutdown() {
// Zwalnianie obiektów MediaRecorder i  przede wszystkim  Camera,
// poniewa ten drugi jest wspó u ytkowany i mog go potrzebowa inne programy
mMediaRecorder.reset();
mMediaRecorder.release();
mCamera.release();
// Po zwolnieniu obiektów nie mo na ich ponownie wykorzysta
mMediaRecorder = null;
mCamera = null;
}
Aby przedstawiony wcze niej kod by wywo ywany automatycznie po zako czeniu korzy-
stania z aktywno ci przez u ytkownika, nale y przes oni metod surfaceDestroyed:
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
shutdown();
}
10.5. Jak wykorzysta androidowy mechanizm
wykrywania twarzy?
Wagied Davids
Problem
Programista chce, aby aplikacja wykrywa a, czy na danym zdj ciu znajduj si ludzkie twarze,
a je li tak, to gdzie.
Rozwi zanie
Nale y zastosowa wbudowany androidowy mechanizm wykrywania twarzy.
Wykrywanie twarzy to atrakcyjna i ciekawa ukryta funkcja interfejsu API Androida. Jest do-
st pna od Androida 1.5. Wykrywanie twarzy polega na wskazywaniu na zdj ciach fragmen-
tów, które przypominaj ludzk twarz. Rozpoznawanie obiektów na podstawie zbioru cech to
jedno z zagadnie z obszaru uczenia maszynowego. Warto zauwa y , e nie chodzi tu o funk-
cj rozpoznawania twarzy. Omawiany tu mechanizm jedynie wykrywa fragmenty wygl daj ce
jak twarz, natomiast nie okre la, do kogo ona nale y. Dopiero w wersji Ice Cream Sandwich
10.5. Jak wykorzysta androidowy mechanizm wykrywania twarzy? 373
Kup książkę Poleć książkę
(Android 4.0) wprowadzono funkcj rozpoznawania twarzy, któr mo na wykorzysta do
odblokowywania telefonu.
Omówienie
G ówna aktywno (przedstawiona na listingu 10.6) tworzy obiekt FaceDetectionView. W przy-
k adowej aplikacji sprawdzany plik zapisano na sta e, jednak w produkcyjnej wersji programu
zdj cia powinny pochodzi z aparatu lub galerii.
Listing 10.6. G ówna aktywno
import android.app.Activity;
import android.os.Bundle;
public class Main extends Activity
{
/** Wywo ywana, gdy aktywno tworzona jest po raz pierwszy */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new FaceDetectionView(this, "face5.JPG"));
}
}
FaceDetectionView to niestandardowa klasa, s u ca do zarz dzania wykrywaniem twarzy
z wykorzystaniem klasy android.media.FaceDetector. Metoda init() okre la grafik u ywan
do oznaczania twarzy. W przyk adzie wiadomo, gdzie znajduj si twarze, a Android powi-
nien je znale . G ówne operacje wykonywane s w metodzie detectFaces(). Wywo uje ona
metod findFaces klasy FaceDetector. Do tej ostatniej metody nale y przekaza zdj cie i tablic
na wyniki. Nast pnie mo na przej po znalezionych twarzach. Potrzebny kod pokazano na
listingu 10.7, a na rysunku 10.1 widoczny jest efekt dzia ania aplikacji.
Rysunek 10.1. Wykrywanie twarzy w praktyce
374 Rozdzia 10. Multimedia
Kup książkę Poleć książkę
Listing 10.7. Plik FaceDetectionView.java
...
import android.media.FaceDetector;
public class FaceDetectionView extends View {
private static final String tag = FaceDetectionView.class.getName();
private static final int NUM_FACES = 10;
private FaceDetector arrayFaces;
private final FaceDetector.Face getAllFaces[] = new FaceDetector.Face[NUM_FACES];
private FaceDetector.Face getFace = null;
private final PointF eyesMidPts[] = new PointF[NUM_FACES];
private final float eyesDistance[] = new float[NUM_FACES];
private Bitmap sourceImage;
private final Paint tmpPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private final Paint pOuterBullsEye = new Paint(Paint.ANTI_ALIAS_FLAG);
private final Paint pInnerBullsEye = new Paint(Paint.ANTI_ALIAS_FLAG);
private int picWidth, picHeight;
private float xRatio, yRatio;
private ImageLoader mImageLoader = null;
public FaceDetectionView(Context context, String imagePath) {
super(context);
init();
mImageLoader = ImageLoader.getInstance(context);
sourceImage = mImageLoader.loadFromFile(imagePath);
detectFaces();
}
private void init() {
Log.d(tag, "Init()...");
pInnerBullsEye.setStyle(Paint.Style.FILL);
pInnerBullsEye.setColor(Color.RED);
pOuterBullsEye.setStyle(Paint.Style.STROKE);
pOuterBullsEye.setColor(Color.RED);
tmpPaint.setStyle(Paint.Style.STROKE);
tmpPaint.setTextAlign(Paint.Align.CENTER);
BitmapFactory.Options bfo = new BitmapFactory.Options();
bfo.inPreferredConfig = Bitmap.Config.RGB_565;
}
private void loadImage(String imagePath) {
sourceImage = mImageLoader.loadFromFile(imagePath);
}
@Override
protected void onDraw(Canvas canvas) {
Log.d(tag, "onDraw()...");
xRatio = getWidth() * 1.0f / picWidth;
yRatio = getHeight() * 1.0f / picHeight;
canvas.drawBitmap(
sourceImage, null, new Rect(0, 0, getWidth(), getHeight()), tmpPaint);
for (int i = 0; i < eyesMidPts.length; i++) {
if (eyesMidPts[i] != null) {
pOuterBullsEye.setStrokeWidth(eyesDistance[i] / 6);
canvas.drawCircle(eyesMidPts[i].x * xRatio,
eyesMidPts[i].y * yRatio, eyesDistance[i] / 2, pOuterBullsEye);
10.5. Jak wykorzysta androidowy mechanizm wykrywania twarzy? 375
Kup książkę Poleć książkę
canvas.drawCircle(eyesMidPts[i].x * xRatio,
eyesMidPts[i].y * yRatio, eyesDistance[i] / 6, pInnerBullsEye);
}
}
}
private void detectFaces() {
Log.d(tag, "detectFaces()...");
picWidth = sourceImage.getWidth();
picHeight = sourceImage.getHeight();
arrayFaces = new FaceDetector(picWidth, picHeight, NUM_FACES);
arrayFaces.findFaces(sourceImage, getAllFaces);
for (int i = 0; i < getAllFaces.length; i++) {
getFace = getAllFaces[i];
try {
PointF eyesMP = new PointF();
getFace.getMidPoint(eyesMP);
eyesDistance[i] = getFace.eyesDistance();
eyesMidPts[i] = eyesMP;
Log.i("Twarz",
i + " " + getFace.confidence() + " " + getFace.eyesDistance() +
" " +
"Ustawienie: (" + getFace.pose(FaceDetector.Face.EULER_X) + "," +
getFace.pose(FaceDetector.Face.EULER_Y) + "," +
getFace.pose(FaceDetector.Face.EULER_Z) + ")" +
"Punkt na wysoko ci oczu: (" + eyesMidPts[i].x + "," +
eyesMidPts[i].y + ")");
} catch (Exception e) {
Log.e("Twarz", i + "  brak twarzy");
}
}
}
}
10.6. Odtwarzanie muzyki z pliku
Marco Dinacci
Problem
Programista chce odtwarza pliki d wi kowe przechowywane w urz dzeniu.
Rozwi zanie
Nale y utworzy i odpowiednio skonfigurowa obiekty MediaPlayer oraz MediaController, a na-
st pnie poda cie k do pliku. Potem mo na rozkoszowa si muzyk .
Omówienie
Odtwarzanie plików muzycznych jest proste  wystarczy skonfigurowa obiekty MediaPlayer
i MediaController.
376 Rozdzia 10. Multimedia
Kup książkę Poleć książkę
Najpierw nale y utworzy aktywno z implementacj interfejsu MediaPlayerControl (listing 10.8).
Listing 10.8. Pocz tek klasy z implementacj interfejsu MediaPlayerControl
public class PlayAudioActivity extends Activity implements MediaPlayerControl {
private MediaController mMediaController;
private MediaPlayer mMediaPlayer;
private Handler mHandler = new Handler();
W metodzie onCreate trzeba utworzy i skonfigurowa obiekty MediaPlayer i MediaControler.
Pierwszy z tych obiektów wykonuje standardowe operacje na plikach muzycznych  odtwarza
je, wstrzymuje i przechodzi do wskazanego miejsca w pliku. Drugi obiekt to widok z przyci-
skami uruchamiaj cymi wspomniane operacje za pomoc metod interfejsu MediaPlayerControl.
Kod metody onCreate przedstawiono na listingu 10.9.
Listing 10.9. Metoda onCreate() odtwarzacza
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mMediaPlayer = new MediaPlayer();
mMediaController = new MediaController(this);
mMediaController.setMediaPlayer(PlayAudioActivity.this);
mMediaController.setAnchorView(findViewById(R.id.audioView));
String audioFile = "" ;
try {
mMediaPlayer.setDataSource(audioFile);
mMediaPlayer.prepare();
} catch (IOException e) {
Log.e("PlayAudioDemo",
"Nie mo na odtworzy pliku " + audioFile + ".", e);
}
mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mHandler.post(new Runnable() {
public void run() {
mMediaController.show(10000);
mMediaPlayer.start();
}
});
}
});
}
Oprócz skonfigurowania obiektów MediaController i MediaPlayer w aplikacji trzeba utworzy
anonimowy odbiornik OnPreparedListener, aby uruchamia odtwarzacz tylko wtedy, gdy plik
ród owy jest gotowy do odtworzenia.
Nale y te pami ta o zwolnieniu zasobów obiektu MediaPlayer w momencie usuwania aktyw-
no ci (listing 10.10).
Listing 10.10. Porz dkowanie zasobów odtwarzacza
@Override
protected void onDestroy() {
10.6. Odtwarzanie muzyki z pliku 377
Kup książkę Poleć książkę
super.onDestroy();
mMediaPlayer.stop();
mMediaPlayer.release();
}
Trzeba te zaimplementowa interfejs MediaPlayerControl. Kod implementacji jest bardzo pro-
sty, co pokazano na listingu 10.11.
Listing 10.11. Implementacja interfejsu MediaPlayerControl
@Override
public boolean canPause() {
return true;
}
@Override
public boolean canSeekBackward() {
return false;
}
@Override
public boolean canSeekForward() {
return false;
}
@Override
public int getBufferPercentage() {
return (mMediaPlayer.getCurrentPosition() * 100) / mMediaPlayer.getDuration();
}
// Pozosta e metody tylko kieruj wywo ania do obiektu MediaPlayer
}
Na zako czenie nale y przes oni metod onTouchEvent, aby wy wietla przyciski z obiektu
MediaController po dotkni ciu ekranu przez u ytkownika.
Poniewa obiekt MediaController tworzony jest programowo, uk ad aktywno ci jest bardzo
prosty:

android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/audioView"
>

10.7. Odtwarzanie d wi ku bez interakcji
z u ytkownikiem
Ian Darwin
Problem
Programista chce, aby aplikacja odtwarza a pliki d wi kowe bez interakcji z u ytkownikiem.
378 Rozdzia 10. Multimedia
Kup książkę Poleć książkę
Rozwi zanie
Aby odtwarza pliki d wi kowe bez interakcji z u ytkownikiem (bez kontrolek do zmiany
g o no ci, wstrzymywania odtwarzania itd.), wystarczy utworzy obiekt MediaPlayer dla da-
nego pliku i wywo a metod start().
Omówienie
Jest to najprostsza technika odtwarzania plików d wi kowych. W porównaniu z aplikacj
z receptury 10.6 ten program nie udost pnia u ytkownikom kontrolek do sterowania odtwa-
rzaniem. Dlatego zwykle nale y udost pni przynajmniej przycisk Stop lub Anuluj  zw asz-
cza je li plik jest d ugi. Je eli jednak w aplikacji chcesz tylko odtwarza krótkie efekty d wi -
kowe, nie musisz udost pnia takich kontrolek.
Dla pliku trzeba utworzy obiekt MediaPlayer. Plik d wi kowy mo e znajdowa si na karcie
SD lub w katalogu res/raw aplikacji. Je li plik d wi kowy jest elementem programu, nale y
umie ci go we wspomnianym katalogu. Tu u ywany jest plik res/raw/alarm_sound.3gp. Refe-
rencja do niego to R.raw.alarm_sound, a do odtwarzania pliku s u y nast puj cy kod:
MediaPlayer player = MediaPlayer.create(this, R.raw.alarm_sound);
player.start();
Je li plik znajduje si na karcie SD, mo na odtworzy go w nast puj cy sposób:
MediaPlayer player = new MediaPlayer();
player.setDataSource(fileName);
player.prepare();
player.start();
Istnieje te metoda pomocnicza, MediaPlayer.create(Context, URI). Metoda ta automatycznie
wywo uje metod prepare().
Aby sterowa odtwarzaczem w aplikacji, mo na wywo ywa odpowiednie metody, np. player.
stop(), player.pause() itd. Je li chcesz ponownie uruchomi odtwarzacz po jego zatrzymaniu,
wywo aj znów metod prepare().
Do odbierania powiadomie o zako czeniu odtwarzania s u y odbiornik OnCompletionListener:
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(Main.this,
"Zako czono odtwarzanie", Toast.LENGTH_SHORT).show();
}
});
Po ostatecznym zako czeniu korzystania z obiektu MediaPlayer nale y wywo a metod
release() tego obiektu, aby zwolni pami . Je li aplikacja tworzy du o obiektów MediaPlayer
i nie zwalnia pami ci, mo e nast pi wyczerpanie zasobów.
Zobacz tak e
Aby wykorzysta wszystkie mo liwo ci obiektu MediaPlayer, nale y pozna jego ró ne stany
i przej cia mi dzy nimi. Pomaga to zrozumie , które metody mo na wywo ywa . Na stronie
http://developer.android.com/reference/android/media/MediaPlayer.html znajdziesz kompletny dia-
gram stanów obiektu MediaPlayer.
10.7. Odtwarzanie d wi ku bez interakcji z u ytkownikiem 379
Kup książkę Poleć książkę
10.8. Konwersja mowy na tekst
Corey Sunwold
Problem
Programista chce, aby aplikacja rejestrowa a mow i przetwarza a j jako tekst.
Rozwi zanie
Jedn z wyj tkowych cech Androida jest wbudowane przetwarzanie mowy na tekst. Zapew-
nia to alternatyw dla wprowadzania tekstu. Jest to przydatne, poniewa u ytkownicy maj
czasem zaj te r ce i nie mog wpisywa informacji.
Omówienie
Android udost pnia wygodny interfejs API do korzystania z wbudowanej funkcji rozpozna-
wania mowy. Interfejs ten oparty jest na intencji RecognizerIntent.
Przyk adowy uk ad jest bardzo prosty (przedstawiono go na listingu 10.12). W uk adzie znaj-
duje si tylko kontrolka TextView o nazwie speechText i kontrolka Button o nazwie getSpeechButton.
Ta ostatnia kontrolka s u y do uruchamiania mechanizmu rozpoznawania mowy, a zwracane
wyniki pojawiaj si w kontrolce TextView.
Listing 10.12. Program ilustruj cy rozpoznawanie mowy
public class Main extends Activity {
private static final int RECOGNIZER_RESULT = 1234;
/** Wywo ywana, gdy aktywno tworzona jest po raz pierwszy */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button startSpeech = (Button)findViewById(R.id.getSpeechButton);
startSpeech.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Mowa na tekst");
startActivityForResult(intent, RECOGNIZER_RESULT);
}
});
}
/**
* Obs uga wyników zwróconych przez aktywno przetwarzaj c mow
380 Rozdzia 10. Multimedia
Kup książkę Poleć książkę
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RECOGNIZER_RESULT && resultCode == RESULT_OK) {
ArrayList matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
TextView speechText = (TextView)findViewById(R.id.speechText);
speechText.setText(matches.get(0).toString());
}
super.onActivityResult(requestCode, resultCode, data);
}
}
Zobacz tak e
http://developer.android.com/reference/android/speech/RecognizerIntent.html.
10.9. Konwersja tekstu na mow
Ian Darwin
Problem
Programista chce, aby aplikacja  wypowiada a napisane s owa, tak aby u ytkownik móg si
z nimi zapozna bez spogl dania na ekran (np. w trakcie prowadzenia samochodu).
Rozwi zanie
Nale y zastosowa interfejs API TextToSpeech.
Omówienie
Interfejs API TextToSpeech wbudowany jest w Android, cho w niektórych wersjach platfor-
my trzeba doinstalowa pliki d wi kowe.
Aby rozpocz korzystanie z omawianego mechanizmu, potrzebny jest tylko obiekt TextTo
Speech. Teoretycznie wystarczy napisa poni szy kod:
private TextToSpeech myTTS = new TextToSpeech(this, this);
myTTS.setLanguage(Locale.US);
myTTS.speak(textToBeSpoken, TextToSpeech.QUEUE_FLUSH, null);
myTTS.shutdown();
Aby jednak zapewni poprawne dzia anie aplikacji, trzeba zastosowa kilka intencji. Jedna
powinna sprawdza , czy dane mechanizmu TTS s dost pne (i instalowa je, je li jest inaczej).
Druga jest potrzebna do uruchamiania mechanizmu TTS. Dlatego w praktyce kod powinien
wygl da tak jak na listingu 10.13. Ta ciekawa prosta aplikacja po ka dym wci ni ciu przyci-
sku Mów wyg asza jedno z kilku banalnych zda .
10.9. Konwersja tekstu na mow 381
Kup książkę Poleć książkę
Listing 10.13. Program ilustruj cy konwersj tekstu na mow
public class Main extends Activity implements OnInitListener {
private TextToSpeech myTTS;
private List phrases = new ArrayList();
public void onCreate(Bundle savedInstanceState) {
phrases.add("Hello Android, Goodbye iPhone");
phrases.add("The quick brown fox jumped over the lazy dog");
phrases.add("What is your mother's maiden name?");
phrases.add("Etaoin Shrdlu for Prime Minister");
phrases.add("The letter 'Q' does not appear in
'antidisestablishmentarianism')");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button startButton = (Button) findViewById(R.id.start_button);
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, 1);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
myTTS = new TextToSpeech(this, this);
myTTS.setLanguage(Locale.US);
} else {
// Brak danych mechanizmu TTS. Aplikacja próbuje je zainstalowa
Intent ttsLoadIntent = new Intent();
ttsLoadIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(ttsLoadIntent);
}
}
}
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int n = (int)(Math.random() * phrases.size());
myTTS.speak(phrases.get(n), TextToSpeech.QUEUE_FLUSH, null);
} else if (status == TextToSpeech.ERROR) {
myTTS.shutdown();
}
}
Pierwszy argument to kontekst (aktywno ), a drugi  odbiornik OnInitListener, tu tak e
zaimplementowany w g ównej aktywno ci. Po zainicjowaniu obiektu TextToSpeech wywo-
ywany jest wspomniany odbiornik. Metoda onInit() tego odbiornika ma powiadamia
o tym, e mechanizm TTS jest gotowy. Przedstawiona tu prosta aplikacja Speaker tylko
generuje s owa. W bardziej rozbudowanym programie warto uruchomi w tek lub us ug
do obs ugi mowy.
382 Rozdzia 10. Multimedia
Kup książkę Poleć książkę
Skorowidz
formatowanie czasu i daty, 97
A
Google Analytics, 90
kontrolowanie danych wej ciowych, 99
ADB, 37
latarka, 92
AdMob, 589
lokalizacja, 473
akcelerometr, 521
mapy, 473
czujniki, 521
menu kontekstowe, 75
dost pno czujnika, 522
menu opcji, 75
executeShakeAction(), 525
monitorowanie poziomu baterii, 83
getSensorList(), 522
mo liwe stany, 35
isAccelerationChanged(), 525
obs uga po cze telefonicznych, 417
onAccuracyChanged(), 527
obs uga wyj tków, 76
onSensorChanged(), 523, 526, 527
projektowanie, 73
orientacji, 527
sieciowe, 441
SensorManager, 522
singleton, 79
temperatury, 528
stoper z odliczaniem wstecznym, 55
wykorzystywanie danych, 524
stosowanie wskazówek, 108
alerty, 315
Tipster, 57
komunikaty toast, 336
tworzenie ekranów powitalnych, 84
powiadomienia, 337
tworzenie kopii zapasowej, 102
d wi k, 339
wspó u ytkowanie danych, 80
reakcja na klikni cie, 342
wymagania, 73
powiadomienie, 341
zmiana orientacji ekranu, 81
w czanie diody LED, 340
zrzutu ekranu, 54
wy wietlanie, 338
biblioteki, 41
przetwarzanie w tle, 330
AndroidPlot, 41, 207
Python, 558
HttpClient, 442, 443
Service, 338
OpenStreetMap, 41
wyskakuj ce okna dialogowe, 321
RGraph, 224
AlertDialog, 321, 532
Bluetooth, 531
AndEngine, 458
pod czanie innego urz dzenia, 533
Android, 13
w czanie, 532
akcelerometr, 521
wykrywanie urz dze , 537
czujniki, 521
dania po cze , 536
animacje, 455
cykl ycia, 35
aplikacje, 35
diagram stanów, 36
awarie, 125
ekran powitalny, 86
Backup Manager, 102
formatowanie liczb, 277
cykl ycia, 35
Double.toString(), 277
dostosowywanie do tabletów, 94
kody formatuj ce, 278
599
Kup książkę Poleć książkę
Android pomijane interfejsy API, 20
formatowanie liczb RGraph, 224
liczba mnoga, 281 rodowisko IDE Eclipse, 29
metody formatuj ce, 278 kana y danych, 76
fragment, 305 komunikacja, 145
g sto ekranu, 74 AsyncTask, 145
grafika, 185 dostawcy tre ci, 175, 178
animacja rastrowa, 228 e-mail, 147
animacje, 455 intencje, 145
niestandardowa czcionka, 185, 188
IPC, 179
OpenGL ES, 185, 188
komponenty obs ugi, 145
paleta kolorów, 216
komunikaty rozg oszeniowe, 157
przybli anie obrazu, 230
odbiorniki rozg oszeniowe, 145
rysowanie p ynnych linii, 194
podtrzymywanie dzia ania us ugi, 155
skanowanie kodów, 204
przekazywanie a cuchów znaków, 151
t o domy lnego widoku, 221
u ywanie w tków, 159
trójwymiarowa, 188
kontrolki, 59
tworzenie ikony, 208, 215
rozmieszczanie, 59
tworzenie wykresów, 224
mechanizmy wprowadzania danych, 75
wy wietlanie danych, 207
multimedia, 367
zdj cia, 198, 200
Gallery, 368
gry, 455
mechanizm wykrywania twarzy, 373
frameworki, 455
odtwarzanie plików muzycznych, 377
GUI, 58, 235
rejestrowanie filmów, 371
alerty, 315
YouTube, 367
animacja, 269
NinePatch, 221
czas, 322
pakiet ADK, 21
ekran wczytywania, 291
pakiet SDK, 24
komponenty, 58
aktualizacja, 46
kontrolka ListView, 343
przyk adowe programy, 44
lista rozwijana, 251
wtyczka ADT, 29
menu, 316
sterowanie, 539
niestandardowe okno dialogowe, 328
kopiowanie tekstu, 542
obrotowy mechanizm wybierania, 325
mened er aktywno ci, 547
obs uga d ugiego klikni cia, 253
polecenia pow oki, 545
obs uga zmian konfiguracji, 238
po czenie z sieci , 539
odbiornik zdarze , 242
tryb dzwonka, 541
otwieranie nowego ekranu, 283
ustawienia projektu, 540
pole wyboru, 247
w czanie wibracji, 544
przekszta canie pól tekstowych, 260
wy wietlanie powiadomie , 544
przycisk wysy ania, 262
rodowisko Eclipse, 24
przyciski graficzne, 249
parametry nowego projektu, 25
przyciski opcji, 247
tworzenie nowego projektu, 45
tworzenie przycisku, 241
uruchamianie projektu, 27
wid et, 236
testy, 111
wid et aplikacji, 236
awarie, 125
wykrywanie gestów, 299
BugSense, 129
wy wietlanie pól tekstowych, 254
chmura, 121
zakrywanie innych komponentów, 292
cykl ycia, 134
internacjonalizacja, 571
debugowanie kodu, 128
a cuchy znaków, 575
konfigurowanie urz dze AVD, 112
tekst aplikacji, 572
lokalny dziennik czasu wykonania, 131
Java, 19
projekt testowy, 122
pakiet JDK, 29
sterowanie programowaniem, 111
600 Skorowidz
Kup książkę Poleć książkę
urz dzenia AVD, 23 Bluetooth
konfigurowanie, 112 akceptowanie po cze , 536
utrwalanie danych, 383 pobieranie adresu MAC, 532
baza SQLite, 401, 402, 403 pobieranie nazwy urz dzenia, 532
dodawanie danych kontaktowych, 412 tworzenie serwera, 536
pobieranie informacji o plikach, 383 wymiana danych z urz dzeniem, 534
ustawianie preferencji, 390 certyfikat, 583
wczytywanie danych kontaktowych, 415 generowanie, 584
wczytywanie plików z aplikacji, 386 korzy ci, 584
wyszukiwanie tekstu, 396 cykl ycia
wy wietlanie zawarto ci katalogu, 387 rejestrowanie zdarze , 135
wielko ekranu, 74 dostawca tre ci, 178
Windows, 29 dostosowywanie do tabletów, 94
rodowisko IDE Eclipse, 29 Google Analytics, 90
wtyczka ADT, 24 Java
wy wietlanie czasu i daty, 97 kod natywny, 552
DateFormat, 97 j zyk C
DateUtils, 99 kod natywny, 553
Formatter, 99 kontrolka ListView, 343
java.util.Date, 98 nag ówki sekcji, 352
TextView, 97 obs uga zmian orientacji, 360
Time, 99 wy wietlanie listy wierszy, 344
zachowywanie danych, 81 zachowywanie pozycji, 356
getLastNonConfigurationInstance(), 81 kontrolowanie danych wej ciowych, 99
onCreate(), 82 KeyListener, 99
onRetainNonConfigurationInstance(), 81 typy odbiorników, 102
onSaveInstanceState(), 81 konwersja tekstu na mow , 382
zdalna us uga, 179 kopia zapasowa, 102
bindService(), 181 Backup Manager, 102
invokeService(), 182 latarka, 92
onBind(), 179 etapy rozwijania, 92
onCreate(), 180 lokalizacja, 473
onDestroy(), 180 aktualizowanie lokalizacji, 474
releaseService(), 182 fikcyjne wspó rz dne GPS, 477
startService(), 181 geokodowanie, 479
stopService(), 182 geokodowanie odwrotne, 480
zrzut ekranu, 52 OpenStreetMap, 473
Device Screen Capture, 53 pobieranie danych o lokalizacji, 474
Android Compatibility, 305 podawanie fikcyjnej lokalizacji, 478
Android Localizer, 575 urz dzenia GPS, 473
aplikacje, 35 mapy, 473
akcelerometr mapy Google a, 480
czujnik orientacji, 527 AddressOverlay, 495
dost pno , 522 ItemizedOverlay, 491
pobieranie danych, 523 MapTest, 481
wykorzystywanie danych, 524 MyOverlay, 488
awarie, 125 obs uga d ugich klikni , 506
adb logcat, 125 wyszukiwanie lokalizacji, 502
NPE, 126 wy wietlanie ikony, 499
Backup Manager, 102 wy wietlanie warstwy, 495
implementacja, 102 menu kontekstowe, 75
polecenie bmgr, 107 menu opcji, 75
Skorowidz 601
Kup książkę Poleć książkę
aplikacje kontrolka TextView, 451
obs uga po cze telefonicznych, 417 MD5, 450
pobieranie danych, 430 na odno niki, 451
po czenia przychodz ce, 418, 420 na posta nieczyteln , 450
po czenia wychodz ce, 421 stosowanie RESTful, 442
wiadomo ci SMS, 425 converse(), 442
wybieranie numeru telefonu, 424 HTTP GET, 442
odbiornik dotyku, 231 HTTP POST, 442
odno niki, 595 klient us ugi, 443
OpenStreetMap, 509 URL, 442
aktualizowanie lokalizacji, 517 URLConnection, 442
obs uga dotkni warstwy, 515 wyra enia regularne, 444
optymalizowanie kodu, 593 BookRank, 445
pobieranie dokumentów Google, 562 wy wietlanie stron internetowych, 452
podpisywanie, 586 kontrolka WebView, 452
projektowanie, 73
ekrany powitalne, 84
B
formatowanie czasu i daty, 97
funkcje urz dzenia, 75
Bluetooth, 531
kana y danych, 76
pod czanie innego urz dzenia, 533
kontrolowanie danych wej ciowych, 99
wymiana danych z urz dzeniem, 534
latarka, 92
w czanie, 532
mechanizmy wprowadzania danych, 75
AlertDialog, 532
obs uga wyj tków, 76
isEnabled(), 532
odbiornik rozg oszeniowy, 83
konfigurowanie, 533
wielko i g sto ekranu, 74
onActivityResult(), 532
przekszta canie wyj tków, 78
pobieranie adresu MAC, 532
rozpoznawanie mowy, 380
pobieranie nazwy, 532
sieciowe, 441
wykrywanie urz dze , 537
parser danych, 446
tryb parowania, 537
przekszta canie tekstu, 450, 451
dania po cze , 536
RESTful, 442
akceptowanie po cze , 536
wyra enia regularne, 444
listenUsingRfcommWithServiceRecord(), 536
wy wietlanie stron internetowych, 452
start(), 536
skanowanie kodów, 204
tworzenie serwera, 536
SCAN_FORMATS, 206
BugSense, 129
SCAN_MODE, 206
SL4A, 556
C
ledzenie korzystania, 90, 91
Google Analytics, 90
cykl ycia, 35
udost pnianie, 587
android.Activity, 35
przesy anie, 587
diagram stanów, 36
rejestrowanie, 587
rejestrowanie zdarze , 135
wspó u ytkowanie danych, 80
wykrywanie gestów, 299
wymagania, 73
D
wy wietlanie danych, 207
dane, 383
wy wietlanie reklam, 588
baza SQLite, 401
zaciemnianie kodu, 593
data i czas, 403
aplikacje sieciowe, 441
insert(), 402
parser danych, 446
moveToFirst(), 403
getRSS(), 447
moveToNext(), 403
przekszta canie tekstu, 450
602 Skorowidz
Kup książkę Poleć książkę
dane przetwarzanie kodu, 408
baza SQLite require(), 411
onCreate(), 401 statyczne zasoby, 411
pobieranie danych, 402 dokumenty Google, 562
query(), 403 lista dokumentów, 564
SQLiteOpenHelper, 401 pobieranie, 562
strftime(), 403 dostawcy tre ci, 175, 178
tworzenie, 401 MyContantProvider, 177
zapisywanie danych, 402 pobieranie danych, 175
informacje o plikach, 383 getContentResolver(), 177
File, 384 onActivityResult(), 176
metody zwracaj ce informacje, 384 query(), 177
JSON, 406 D-pad, 192
generowanie danych, 406 Droid, 185, 186
przetwarzanie a cucha znaków, 407
kontaktowe, 412
E
addContact(), 413
dodawanie danych, 412
EDGE, 441
pobieranie danych, 415
parser danych, 446
F
pobieranie, 430
akcelerometr, 523
Facebook, 467
baza SQLite, 402
fragment, 305
dane kontaktowe, 415,
frameworki, 455, 549
dostawcy tre ci, 175
AndEngine, 458
lokalizacja, 574
AppCelerator Titanium, 549
po czenia telefoniczne, 430
Flixel, 456
TelephonyManager, 430
PhoneGap, 549, 568
pojemno karty SD, 390
ustawianie preferencji, 390
domy lne, 394
G
getBoolean(), 393
Gallery, 368
getDefaultSharedPreferences(), 393
geokodowanie, 479
getString(), 393
gesty dotykowe, 230
onCreate(), 392
odbiornik dotyku, 231
onSharedPreferenceChanged(), 394
Google Analytics, 90
PreferenceActivity, 394
Google Play, 587
PreferenceCategory, 391
GPRS, 441
PreferenceScreen, 391, 392
graficzny interfejs u ytkownika, Patrz GUI
wczytywanie plików z aplikacji, 386
grafika, 185
openRawResource(), 387
animacja rastrowa, 228
wyszukiwanie tekstu, 396
onWindowFocusChanged(), 229
DbAdapter, 396
start(), 229
wy wietlanie zawarto ci katalogu, 387
niestandardowa czcionka, 185, 188
accept(), 389
Iceberg, 186
FilenameFilter, 389
OTF, 186
kontrolka ListView, 388
TTF, 186
listFiles(), 388
Typeface.create(), 186
XML, 407
ustawianie, 187
interfejs DOM API, 407
OpenGL ES, 185
interfejs XmlPullParser, 409
przybli anie obrazu, 230
newInstance(), 410
odbiornik dotyku, 231
newPullParser(), 410
Skorowidz 603
Kup książkę Poleć książkę
grafika autouzupe nianie tekstu, 257, 258
rysowanie p ynnych linii, 194 AutoCompleteTextView, 257
expandDirtyRect(), 195 onTextChanged(), 258
getHistoricalX(int), 195
czas, 322
getHistoricalY(int), 195
kontrolka Timepicker, 323
getHistorySize(), 194
ustawianie czasu, 324
invalidate(), 195
do czanie odbiornika zdarze , 242
TouchEvent, 194
anonimowa klasa wewn trzna, 244
skanowanie kodów, 204
implementacja aktywno ci, 244
SCAN_FORMATS, 206
interfejs jako typ, 243
SCAN_MODE, 206
klasa sk adowa, 243
t o domy lnego widoku, 221
klasa wewn trzna, 242
kontrolka EditText, 222
new OnClickListener(){...}, 243
trójwymiarowa, 188
dotykowe informacje zwrotne, 270
buffer.position(0), 191
oparte na wibracjach, 271
D-pad, 192
zdarzenia generuj ce, 272
obracanie sze cianu, 192
dzia anie widoków, 249
onDrawFrame(), 190
ekran wczytywania, 291
onSurfaceChanged(), 190
LoadingScreen, 292
requestFocus(), 194
fragment, 305
setFocusableInTouchMode(), 194
IDE Eclipse, 235
wy wietlanie sze cianu, 190
SWT, 235
tworzenie ikony, 208, 215
Java ME, 235
formaty ikon, 220
Java SE, 235
obramowanie, 217
Swing, 235
paleta kolorów, 216
kontrolka ListView, 343
PNG, 209
brak danych, 347
SVG, 210
nag ówki sekcji, 352
wielko , 210
obs uga zmian orientacji, 360
wymiary grafiki, 217
pusta lista, 348
wymiary ikon, 217
stronicowanie, 344
tworzenie wykresów, 224
wy wietlanie listy wierszy, 344
RGraph, 224
zachowywanie pozycji, 356
wy wietlanie danych, 207
lista rozwijana, 251
AndroidPlot, 207
Adapter, 251
zdj cia, 198, 200
getSelectedItem(), 252
android.media.Camera, 200
kontrolka Spinner, 251
configure(), 202
toString(), 252
onActivityResult(), 199
menu, 316
surfaceChanged(), 202
addSubMenu(), 319
gry, 455
definicja, 316
frameworki, 455
AndEngine, 458 niestandardowe menu, 317
Flixel, 456 obs uga wyboru opcji, 317
GUI, 235, 238 onCreateOptionsMenu(), 316, 319
alerty, 315 onOptionsItemSelected(), 317, 320
AlertDialog, 321 pocz tkowe menu, 320
komunikaty toast, 336
podmenu, 318, 321
powiadomienia, 337
tworzenie, 316
przetwarzanie w tle, 330
wy wietlanie, 316
wyskakuj ce okna dialogowe, 321
niestandardowe okno dialogowe, 328
animacja, 269
Dialog, 328
getCurrentFocus(), 269
okno O programie, 333, 336
kod animacji, 269
okno ProgressDialog, 330
onClick(), 269
604 Skorowidz
Kup książkę Poleć książkę
run(), 330 zakrywanie innych komponentów, 292
DrawerButton, 294
z zak adkami, 331
SlidingDrawer, 293, 295
niestandardowy pasek tytu u, 275, 277
zaznaczanie grup, 265
obramowanie, 296
kontrolka RatingBar, 265
kolor, 297
onRatingChanged, 266
kszta t, 297
RatingBar, 265
z zaokr glonymi rogami, 298
obrotowy mechanizm wybierania, 325
dzia anie, 325
I
kontrolki Android-Wheel, 325
obs uga d ugiego klikni cia, 253
IDE Eclipse, 29, 235
setLongClickable(), 253
SWT, 235
setOnLongClickListener(), 253
Inkscape, 209, 228
obs uga zmian konfiguracji, 238
Document Properties, 212
refreshUI(), 240
Export Bitmap, 211, 213, 229
zachowywanie stanu aplikacji, 240
SVG, 210
otwieranie nowego ekranu, 283 instrukcje
kontrolka Button, 287 adb logcat, 125
kontrolka TextView, 286 create project, 21
nast pne okno aplikacji, 290 generowane elementy, 22
lista argumentów, 22
pierwszy ekran, 290
Intent.createChooser, 151
warunki, 285
Intent.putExtra(), 151
wid et aplikacji, 284
intencja
pole wyboru, 247
intencja rozg oszeniowa, 428
przechwytywanie klawiszy, 264
intencje, 146
onKeyDown, 264
e-mail
przekszta canie pól tekstowych, 260
z poziomu widoku, 147
prze czanie aktywno ci, 273
z za cznikami, 150
przyciski
Intent, 146
graficzne, 249
robienie zdj , 198
opcji, 247
w czenie Bluetootha, 532
tworzenie, 241
wybieranie numeru telefonu, 424
wysy ania, 262
internacjonalizacja, 571
stosowanie kontrolek, 246
Locale, 571
RadioGroup, 247
a cuchy znaków, 572
Spinner, 246
wyszukiwanie, 575
ViewGroup, 247
tekst aplikacji, 572
TableLayout, 63
wersje regionalne, 574
tworzenie przycisku, 241
onCreate(), 241
setOnClickListener(), 241
J
wid et, 236
wid et aplikacji, 236, 311
Java, 19
wykrywanie gestów, 299
biblioteki
GestureDetector, 299
RGraph, 224
onTouchEvent, 299
definiowanie nowej klasy, 288
wy wietlanie pól tekstowych, 254
HTML5, 566
addTextChangedListener(), 256
kod mostu, 567
afterTextChanged(), 256
interfejsy API, 20
beforeTextChanged(), 256
kod natywny, 552
EditText, 254, 255
metody formatuj ce, 278
onCreate(), 256
obs uga wyj tków, 76
onTextChanged(), 256
Exception, 77
TextView, 254
IOException, 77
Skorowidz 605
Kup książkę Poleć książkę
Java Cube, 190
obs uga wyj tków CustomDialog, 331
kontrolowane, 76 DateFormat, 97
niekontrolowane, 76 DateUtils, 99
przekszta canie wyj tków, 77 DbAdapter, 396
RuntimeException, 77 DemoCharts, 363
Throwable, 77 Dialog, 328
VMError, 77 EditText, 254
pakiet JDK, 29 Exception, 77
parser ROME, 446 FaceDetectionView, 374
rodowisko IDE Eclipse, 29 File, 384
j zyki programowania, 549 metody zwracaj ce informacje, 384
C, 549 FileSaver, 82
kod natywny, 551, 553 Formatter, 99
Clojure, 549 FragmentTestActivity, 306
Erlang, 549 Geocoder, 479
F#, 549 GestureDetector, 299
Groovy, 549 Handler, 167
HTML5, 566 IncomingCallInterceptor, 419
Scala, 549 Intent, 146
Scheme, 549 IOException, 77
skryptowe, 556 ItemizedOverlay, 490
aplikacja SL4A, 556 java.util.Date, 98
BeanShell, 556 KeyListener, 99
JavaScript, 557 ListActivity, 349
JRuby, 557 LoadingScreen, 292
Lua, 556 Locale, 571
Perl, 556 MapTest, 481
Python, 556 MapView, 481
Tcl, 557 MD5, 450
JSON, 406 MediaRecorder, 371
MetarItem, 498
MyContantProvider, 177
K
MyLocationListener, 475
MyLocationOverlay, 486
keytool, 584
MyOverlay, 488
klasy
OutgoingCallInterceptor, 421
AboutBox, 333, 334
PackageInfo, 333
ActivityInstrumentationTestCase2, 124
ProgressDialog, 164
Adapter, 251, 350
RatingBar, 265
AddressOverlay, 495
w a ciwo ci, 265
AlertDialog, 71, 321
Runnable, 159
android.Activity, 35
Runtime, 545
android.app.Activity, 64
RuntimeException, 77
android.app.Application, 79
RuntimeLog, 131
android.media.Camera, 200
kod, 132
AndroidPlot, 207
ScaleBarOverlay, 513
ArrayAdapter, 350
SensorManager, 522
AsyncTask, 145, 161, 164
Service, 155
BaseAdapter, 358
ServiceManager, 158
BookRank, 445
sk adowa, 243
BugSenseHandler, 130
SlidingDrawer, 292
ChoiceFormat, 282
SmsManager, 426
CountDownTimer, 55
606 Skorowidz
Kup książkę Poleć książkę
SQLiteOpenHelper, 401 finish(), 154
StatFs, 390 getIntent().getExtras().getString(), 151
TelephonyManager, 430 setResult(), 154
TestFragment, 307 z aktywno ci podrz dnej, 154
TextView, 254 podtrzymywanie dzia ania us ugi, 155
Thorwable, 77 onBind(), 156
hierarchia, 77 onCreate, 155
Thread, 159 onStartCommand(), 156
Throwable, 77 Service, 155
TicTacToeActivity, 239 TrackService, 156
TicTacToeGame, 240 przesy anie danych, 151
Time, 99 Intent.getExtras(), 153
TouchEvent, 194 Intent.putExtra(), 151
TrackService, 156 MySubActivity.finish(), 153
URL, 442 onActivityResult(), 153
URLConnection, 442 z aktywno ci, 153
View, 64, 194 u ywanie w tków, 159
WebSettings, 453 AsyncTask, 161
wewn trzna, 242 Handler, 167
anonimowa, 244 kolejka w tków, 167
komponenty obs ugi, 145 onCreate(), 159, 162
komunikacja, 145 onItemClick(), 162
dostawcy tre ci, 175, 178 przesy anie komunikatów, 166
pobieranie danych, 175 run(), 159
e-mail, 147 Runnable, 159
Intent.createChooser, 151 start(), 159
z poziomu widoku, 147 Thread, 159
z za cznikami, 150 komunikat rozg oszeniowy, 420
intencje, 146 komunikaty toast, 315, 336
e-mail, 147, 150 kontrolki, 59
Intent, 146 Android-Wheel, 325
IPC, 179 AutoCompleteTextView, 257
zdalne us ugi, 179 zape nianie, 259
komponenty obs ugi, 145, 167 Button, 287
komunikaty rozg oszeniowe, 157 CheckBox, 246
kod klasy odbiornika, 158 EditText, 63, 64, 254, 255, 501
publikowanie rozg aszanych zdarze , 157 z has em, 261
rejestrowanie odbiornika, 157 GridView, 238
ServiceManager, 158 ImageSwitcher, 368
tworzenie odbiornika, 157 ListView, 293, 343, 388
odbiorniki rozg oszeniowe, 145 brak danych, 347
operacje w tle, 160 DemoCharts, 363
AsyncTask, 161, 164 dostosowanie zawarto ci, 357
doInBackground(), 162 getCount(), 347
execute(), 163 getItem(), 347
onClickListener(), 163 getTag(), 345
onCreate(), 162 getView(), 358
onCreateDialog(), 164 konfigurowanie, 345
onItemClick(), 162 ListActivity, 349
pobieranie receptur, 166 nag ówki sekcji, 352
ProgressDialog, 164 notifyDataSetChanged(), 360
setCancelable(), 164 obs uga zmian orientacji, 360
pobieranie danych, 152 onConfigure(), 363
Skorowidz 607
Kup książkę Poleć książkę
kontrolki
M
ListView
pusta lista, 348
mapy, 473
setListAdapter(), 345
Google a, 480
stronicowanie, 344
AddressOverlay, 495
wy wietlanie listy wierszy, 344
aktualna lokalizacja, 486
z ikonami, 349
createItem(), 491
zachowywanie pozycji, 356
disableMyLocation(), 486
RadioButton, 246
draw(), 490
RadioGroup, 247
drawCircle(), 500
RatingBar, 265
getCenter(), 493
rozmieszczanie, 59
invalidate(), 489
ScrollWheel, 326
isRouteDisplayed(), 481
Spinner, 246, 251
ItemizedOverlay, 490
TableRaw, 60
ItemizedOverlayXXXdraw(), 497
TabView, 503
kilka znaczników, 493
TabWidget, 503
klikni cie znacznika, 494
TextView, 26, 64, 97, 238, 254, 286, 451
konfigurowanie urz dzenia AVD, 480
Timepicker, 322
kontrolka TabView, 503
ViewGroup, 247
lista kontrolna, 484
WebView, 452
MapTest, 481
modyfikacja wygl du, 453
MapView, 481
WheelView, 325
MapView.onTouchEvent(), 506
MetarItem, 498
MetarItem::draw(), 498
L
MyLocationOverlay, 486
MyOverlay, 488
liczby, 277
obs uga d ugich klikni , 505
formatowanie, 277
onCreate(), 492
kody formatuj ce, 278
populate(), 492
metody formatuj ce, 278
rejestrowanie klucza, 483
LinkedInem, 468
size(), 491
Linuks, 550
TabSpec.setContent(), 503
polecenia, 550
tworzenie nowego projektu, 481
lokalizacja, 473, 571
tworzenie warstwy, 495
geokodowanie, 479
wyszukiwanie lokalizacji, 501, 502
Geocoder, 479
wy wietlanie ikony, 499
odwrotne, 480
wy wietlanie warstwy, 495
okre lanie po o enia u ytkownika, 473
zmiany trybu mapy, 496
aktualizowanie lokalizacji, 474
znacznik lokalizacji, 487
fikcyjne wspó rz dne GPS, 477
znacznik zast pczy, 493
informacje z GPS-a, 475
OpenStreetMap, 509
MyLocationListener, 475
aktualizowanie lokalizacji, 516
onLocationChanged(), 475
obs uga dotkni warstwy, 514
pobieranie danych o lokalizacji, 474
przesuwanie mapy, 518
podawanie fikcyjnej lokalizacji, 478
ScaleBarOverlay, 513
setMockLocation(), 477
skala, 513
tryb COARSE, 474
tworzenie warstw, 511
tryb FINE, 474
zmiana lokalizacji, 519
Monkey, 140
MOTODEV Studio, 576
608 Skorowidz
Kup książkę Poleć książkę
multimedia, 367 klasa przechwytuj ca, 421
konwersja mowy na tekst, 380 OutgoingCallInterceptor, 421
konwersja tekstu na mow , 381 przechwycone po czenie, 423
mechanizm wykrywania twarzy, 373 setResultData(),421, 423
detectFaces(), 374 wiadomo ci SMS, 425
FaceDetectionView, 374 kod do wysy ania, 426
init(), 374 odbieranie, 428
odtwarzanie filmów, 367 odebrana wiadomo , 426
YouTube, 368 onReceive(), 428
odtwarzanie plików muzycznych, 377 sendMultipartTextMessage(), 426
bez interakcji z u ytkownikiem, 379 sendTextMessage(), 426
MediaControler, 377 SmsManager, 426
MediaPlayer, 377 wysy anie, 425, 429
onCreate(), 377 wybieranie numeru, 424
onTouchEvent(), 378 odbiorniki rozg oszeniowe, 83, 145, 418
porz dkowanie zasobów odtwarzacza, 378 odzyskiwanie, 345
rejestrowanie filmów, 371 OpenGL ES, 185, 187, 455
initRecorder(), 372 grafika trójwymiarowa, 188
MediaRecorder, 371 buffer.position(0), 191
onCreate(), 371 D-pad, 192
surfaceCreated(), 373 obracanie sze cianu, 192
onDrawFrame, 190
onSurfaceChanged, 190
N
requestFocus(), 194
setFocusableInTouchMode(true), 194
nag ówki sekcji, 352
wy wietlanie sze cianu, 190
narz dzia
OpenMoko, 521
ADB, 37
OpenStreetMap, 473, 509
AndEngine, 458
optymalizowanie kodu, 593
android, 21
OSM, Patrz OpenStreetMap
Android Localizer, 575
OTF, 186
Google Analytics, 90
keytool, 584
Monkey, 140
P
MOTODEV Studio, 576
ProGuard, 592 Paint.NET, 218
StrictMode, 139 Canvas Dialog, 218
NinePatch, 221 Colors, 218
pakiet ADK, 21
android, 21
O
create project, 21
pakiet JDK, 29
obs uga po cze telefonicznych, 417
pakiet SDK, 29
pobieranie danych, 430
aktualizacja, 46
okre lanie stanu telefonu, 431
mo liwe b dy, 49
TelephonyManager, 430
instalacja, 31
przechwytywanie po cze przychodz cych,
przyk adowe programy, 44
418, 420
SDK Manager, 32, 47
IncomingCallInterceptor, 419
okno komunikatów, 48
kod manifestu aplikacji, 419
wtyczka ADT, 29
kod przechwytuj cy, 418
parser danych, 446
odbiornik rozg oszeniowy, 418
parser ROME, 446
przechwytywanie po cze wychodz cych, 421
PNG, 209
abortBroadcast(), 423
pojemno karty SD, 390
getResultData(), 424
Skorowidz 609
Kup książkę Poleć książkę
polecenia pow oki, 545 po czenie z sieci , 539
powiadomienia, 338 informacje o sieci, 540
ProGuard, 592 tryb dzwonka, 541
protokó HTTP, 441 ustawianie, 541, 542
protokó SPP, 531 ustawienia projektu, 540
przycisk graficzny, 249 w czanie wibracji, 544
wy wietlanie powiadomie , 544
ledARGB(), 544
R
notify(), 544
stoper z odliczaniem wstecznym, 55
RESTful, 441
CountDownTimer, 55
rozg aszanie uporz dkowane, 420
onFinish(), 55
onTick(), 55
S
StrictMode, 139
stronicowanie, 344
sieci spo eczno ciowe, 467
SVG, 210
Facebook, 467
LinkedInem, 468
protokó HTTP, 467
obs uga klikni cia, 468
rodowisko Eclipse, 24
pobieranie logo, 468
parametry nowego projektu, 25
tworzenie przycisków graficznych, 468
projekt testowy, 124
Twitter, 467, 470
TextView, 26
getTwitterTimeline(), 470
tworzenie nowego projektu, 45
wczytywanie chronologicznej listy tweetów,
tworzenie projektu powi zanego, 39
470
rodowisko IDE Eclipse, 29
sieci, 441
3G, 441
EDGE, 441
T
GPRS, 441
protokó HTTP, 441 testy, 111
protokó HTTPS, 441 awarie, 125
protokó SPP, 531 adb logcat, 125
RESTful, 441, 442 findViewById(), 127
spo eczno ciowe, 467 NPE, 126
Facebook, 467 BugSense, 129
LinkedInem, 468 BugSenseHandler, 130
protokó HTTP, 467 setContentView(), 130
Twitter, 467, 470 chmura, 121
standard HDP, 531 cykl ycia, 134
XML/SOAP, 441 onDestroy(), 138
singleton, 79, 240 onPause(), 138
standard HDP, 531 onRestart(), 138
standardowe rozg aszanie, 420 onStop(), 138
sterowanie, 539 rejestrowanie zdarze , 135
kopiowanie tekstu, 543 scenariusze, 138
getText(), 543 uruchamianie aktywno ci, 135, 136
setText(), 543 wstrzymywanie aktywno ci, 135, 137
mened er aktywno ci, 547 debugowanie kodu, 128
polecenia pow oki, 545 dane wyj ciowe, 128
exec(), 545 Log.d(), 128
process.waitFor(), 545 lokalny dziennik czasu wykonania
Runtime, 545 RuntimeLog, 131
uruchamianie, 546 lokalny dziennik czasu wykonania, 131
610 Skorowidz
Kup książkę Poleć książkę
Monkey, 140 opcje uruchomieniowe, 116, 119
stosowanie, 141 testy, 113
projekt testowy, 122 tworzenie nowego urz dzenia, 115
ActivityInstrumentationTestCase2, 124 uruchamianie nowego urz dzenia, 117
konfiguracja, 122 w a ciwo ci urz dze , 118
tworzenie, 122 urz dzenia GPS, 473
w rodowisku Eclipse, 124
w rodowisku IntelliJ IDEA, 123
W
sterowanie programowaniem, 111
StrictMode, 139
wiadomo ci SMS, 426
urz dzenia AVD, 113
odbieranie, 428
definiowanie, 115
get(), 428
konfigurowanie, 114
intencja rozg oszeniowa, 428
tworzenie nowego urz dzenia, 115
onReceive(), 428
uruchamianie nowego urz dzenia, 117
SmsManager, 426
w a ciwo ci urz dze , 118
wysy anie, 425, 429
Tipster, 57
kod, 426
AlertDialog, 71
okno Emulator Control, 430
android.app.Activity, 64
sendMultipartTextMessage(), 426
calculate(), 68
sendTextMessage(), 426
EditText, 63
wid et, 236
findViewById(), 64
wid et aplikacji, 236, 284, 311
getCheckedRadioButtonId(), 71
wtyczka ADT, 24, 29
OnCheckedChangeListener(), 66
instalacja, 33
OnKeyListener(), 67
wyra enia regularne, 444
requestFocus(), 65
wy wietlanie
reset(), 69
czasu i daty, 97
setEnabled(), 65
danych, 207
showErrorAlert(), 69, 71
ikony, 499
TableLayout, 60,
listy wierszy, 344
TableRaw, 60
menu, 316
View, 64
powiadomie , 338, 544
TTF, 186
pól tekstowych, 254
Twittera, 467
reklam, 588
tworzenie
stron internetowych, 452
bazy SQLite, 401
warstwy, 495
ekranów powitalnych, 84
zawarto ci katalogu, 387
ikony, 208, 215
kopii zapasowej, 102
X
menu, 316
nowego urz dzenia AVD, 115
XML/SOAP, 441
odbiornika rozg oszeniowego, 157
projektu testowego, 122
przycisku, 241, 468
Y
serwera, 536
YouTube, 367
warstw mapy, 495, 511
wykresów, 224
Z
U
zaciemnianie kodu, 593
urz dzenia AVD, 23, 113
definiowanie, 115
konfigurowanie, 112, 114, 480
Skorowidz 611
Kup książkę Poleć książkę
612 Skorowidz
Kup książkę Poleć książkę


Wyszukiwarka

Podobne podstrony:
tworzenie aplikacji w jezyku java na platforme android
recepty (2)
14 Niezgodności recepturowe
Zolta zupa grochowa z wieprzowym ryjem (stara receptura)
Kartofle ze sledziem (stara receptura)
wszystkie recepty jakei były u olczakowej
receptory cz2
Placek wojenny (stara receptura)
android info
Niezgodności recepturowe

więcej podobnych podstron