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ądź towarowymi ich właścicieli.
Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były kompletnei 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 HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: 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/andrecMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/andrec.zip
Printed in Poland.
• Kup książkę• Poleć książkę • Oceń książkę
• Księgarnia internetowa• Lubię to! » Nasza społeczność
5
Spis tre�ci
Przedmowa ............................................................................................................................. 13
1. Podstawowe informacje .............................................................................................. 191.1. Wprowadzenie — podstawowe informacje 191.2. Nauka Javy 191.3. Tworzenie aplikacji „Witaj, �wiecie” z poziomu wiersza polece� 211.4. Tworzenie aplikacji „Witaj, �wiecie” w �rodowisku Eclipse 241.5. Konfigurowanie �rodowiska IDE w systemie Windows pod k�tem
programowania aplikacji na Android 291.6. Cykl �ycia w Androidzie 351.7. Instalowanie plików .apk w emulatorze za pomoc� narz�dzia ADB 361.8. Instalowanie aplikacji w emulatorze za pomoc� sklepu SlideME 381.9. Wspó�u�ytkowanie klas Javy z innym projektem �rodowiska Eclipse 39
1.10. Wskazywanie bibliotek z implementacj� funkcji zewn�trznych 411.11. Wykorzystanie przyk�adów z pakietu SDK do u�atwienia sobie pracy 431.12. Aktualizowanie pakietu SDK Androida 461.13. Wykonywanie zrzutów w emulatorze i urz�dzeniu z Androidem 521.14. Prosty przyk�adowy program do odliczania wstecznego 551.15. Program Tipster — kalkulator napiwków na Android 57
2. Projektowanie udanych aplikacji ................................................................................. 732.1. Wprowadzenie — projektowanie udanych aplikacji na Android 732.2. Obs�uga wyj�tków 762.3. Obiekt Application w Androidzie jako singleton 792.4. Zachowywanie danych po zmianie orientacji ekranu 812.5. Monitorowanie poziomu baterii w urz�dzeniach z Androidem 832.6. Tworzenie ekranów powitalnych w Androidzie 842.7. Projektowanie aplikacji na potrzeby konferencji, BarCampu,
hackathonu lub instytucji 882.8. Wykorzystanie narz�dzia Google Analytics w aplikacjach na Android 90
6 � Spis tre�ci
2.9. Prosta latarka 922.10. Dostosowywanie aplikacji na telefony z Androidem do tabletów 942.11. Preferencje obowi�zuj�ce przy pierwszym uruchomieniu aplikacji 952.12. Formatowanie czasu i daty na potrzeby wy�wietlania 972.13. Kontrolowanie danych wej�ciowych za pomoc� odbiorników KeyListener 992.14. Tworzenie kopii zapasowej danych aplikacji na Android 1022.15. Stosowanie wskazówek zamiast okien podpowiedzi 108
3. Testy ............................................................................................................................. 1113.1. Wprowadzenie — testy 1113.2. Programowanie sterowane testami w Androidzie 1113.3. Konfigurowanie urz�dze� AVD na potrzeby testowania aplikacji 1123.4. Testowanie aplikacji w wielu urz�dzeniach za pomoc� chmury 1213.5. Tworzenie i stosowanie projektu testowego 1223.6. Rozwi�zywanie problemów z awariami aplikacji 1253.7. Debugowanie z wykorzystaniem instrukcji Log.d i okna LogCat 1283.8. Automatyczne otrzymywanie raportów o b��dach od u�ytkowników
za pomoc� mechanizmu BugSense 1293.9. Korzystanie z lokalnego dziennika czasu wykonania do analizowania
b��dów i innych sytuacji 1313.10. Odtwarzanie scenariuszy cyklu �ycia aktywno�ci na potrzeby testów 1343.11. Rozwijanie p�ynnie dzia�aj�cych aplikacji za pomoc� narz�dzia
StrictMode 1393.12. Korzystanie z programu Monkey 1403.13. Wysy�anie komunikatów tekstowych i przekazywanie wywo�a�
mi�dzy urz�dzeniami AVD 142
4. Komunikacja wewn�trz- i mi�dzyprocesowa .......................................................... 1454.1. Wprowadzenie — komunikacja wewn�trz- i mi�dzyprocesowa 1454.2. Obs�ugiwanie strony internetowej, numeru telefonu lub innych
elementów za pomoc� intencji 1464.3. Wysy�anie e-maili z poziomu widoku 1474.4. Wysy�anie e-maili z za��cznikami 1504.5. Przekazywanie �a�cuchów znaków za pomoc� instrukcji Intent.putExtra() 1514.6. Pobieranie danych z aktywno�ci podrz�dnej do aktywno�ci g�ównej 1524.7. Podtrzymywanie dzia�ania us�ugi w trakcie wy�wietlania innych aplikacji 1554.8. Wysy�anie i odbieranie komunikatów rozg�oszeniowych 1574.9. Uruchamianie us�ugi po ponownym uruchomieniu urz�dzenia 158
4.10. U�ywanie w�tków do tworzenia szybko reaguj�cych aplikacji 1594.11. Korzystanie z klasy AsyncTask do wykonywania operacji w tle 1604.12. Przesy�anie komunikatów mi�dzy w�tkami za pomoc� kolejki w�tków
aktywno�ci i komponentu obs�ugi 166
Spis tre�ci � 7
4.13. Tworzenie androidowej wersji kalendarza Epoch(napisanego w HTML-u i JavaScripcie) 168
5. Dostawcy tre�ci ............................................................................................................1755.1. Wprowadzenie — dostawcy tre�ci 1755.2. Pobieranie danych z dostawcy tre�ci 1755.3. Pisanie dostawcy tre�ci 1775.4. Pisanie zdalnej us�ugi na Android 179
6. Grafika ......................................................................................................................... 1856.1. Wprowadzenie — grafika 1856.2. Stosowanie niestandardowej czcionki 1856.3. Wy�wietlanie obracaj�cego si� sze�cianu za pomoc� specyfikacji
OpenGL ES 1876.4. Sterowanie obracaj�cym si� sze�cianem 1916.5. Odr�czne rysowanie p�ynnych linii 1946.6. Robienie zdj�� za pomoc� intencji 1986.7. Robienie zdj�� za pomoc� klasy android.media.Camera 2006.8. Skanowanie kodu kreskowego lub kodu QR za pomoc� programu
Google ZXing 2046.9. Wy�wietlanie diagramów i wykresów za pomoc� klasy AndroidPlot 207
6.10. Tworzenie ikony do androidowego launchera za pomoc� programuInkscape 208
6.11. atwe tworzenie ikon do launchera za pomoc� programu Paint.NETi grafik z serwisu OpenClipArt.org 215
6.12. Korzystanie z plików NinePatch 2216.13. Tworzenie wykresów na strony HTML5 za pomoc� biblioteki RGraph 2246.14. Dodawanie prostej animacji rastrowej 2286.15. Przybli�anie obrazu za pomoc� gestów dotykowych 230
7. Graficzny interfejs u�ytkownika ...............................................................................2357.1. Wprowadzenie — interfejs GUI 2357.2. Poznawanie i przestrzeganie wytycznych tworzenia
interfejsu u�ytkownika 2367.3. Obs�uga zmian konfiguracji przez oddzielenie widoku od modelu 2387.4. Tworzenie przycisku i odbiornika klikni�� 2417.5. Pi�� sposobów na do��czanie odbiornika zdarze� 2427.6. Stosowanie kontrolek CheckBox i RadioButton 2467.7. Wzbogacanie projektu interfejsu u�ytkownika za pomoc�
przycisków graficznych 2497.8. Udost�pnianie listy rozwijanej z opcjami za pomoc� klasy Spinner 2517.9. Obs�uga d�ugiego klikni�cia 253
7.10. Wy�wietlanie pól tekstowych TextView i EditText 254
8 � Spis tre�ci
7.11. Ograniczanie warto�ci pola EditText za pomoc� atrybutóworaz interfejsu TextWatcher 255
7.12. Kontrolka AutoCompleteTextView 2577.13. Zape�nianie kontrolki AutoCompleteTextView za pomoc� zapyta�
do bazy SQLite 2597.14. Przekszta�canie pól tekstowych w pola na has�o 2607.15. Zmiana klawisza Enter na Next na klawiaturze programowej 2617.16. Obs�uga w aktywno�ci zdarze� zwi�zanych z klawiszami 2647.17. Poka� im gwiazdy — kontrolka RatingBar 2657.18. Drgaj�cy widok 2687.19. Wy�wietlanie dotykowych informacji zwrotnych 2707.20. Prze��czanie si� mi�dzy ró�nymi aktywno�ciami w widoku TabView 2737.21. Tworzenie niestandardowego paska tytu�u 2757.22. Formatowanie liczb 2777.23. Poprawne stosowanie liczby mnogiej 2817.24. Wy�wietlanie drugiego ekranu z poziomu pierwszego 2837.25. Tworzenie ekranu wczytywania, wy�wietlanego przy prze��czaniu
aktywno�ci 2917.26. Zakrywanie innych komponentów za pomoc� klasy SlidingDrawer 2927.27. Otwieranie komponentu SlidingDrawer od góry do do�u 2957.28. Dodawanie do uk�adu obramowania z zaokr�glonymi rogami 2967.29. Wykrywanie gestów w Androidzie 2997.30. Tworzenie interfejsu u�ytkownika w Androidzie 1.6 i nowszych
wersjach za pomoc� fragmentów z Androida 3.0 3057.31. Korzystanie z galerii zdj�� w Androidzie 3.0 3087.32. Tworzenie prostego wid�etu aplikacji 311
8. Alerty w interfejsach GUI — menu, okna dialogowe, komunikaty toasti powiadomienia ......................................................................................................... 315
8.1. Wprowadzenie — alerty w interfejsach GUI 3158.2. Tworzenie i wy�wietlanie menu 3168.3. Obs�uga wyboru opcji menu 3178.4. Tworzenie podmenu 3188.5. Tworzenie wyskakuj�cych okien dialogowych (okien z alertami) 3218.6. Kontrolka Timepicker 3228.7. Tworzenie obrotowego mechanizmu wybierania
(podobnego do tego z iPhone’ów) 3258.8. Tworzenie okna dialogowego z zak�adkami 3278.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
Spis tre�ci � 9
8.12. Modyfikowanie wygl�du komunikatów toast 3368.13. Tworzenie powiadomienia wy�wietlanego na pasku stanu 337
9. GUI — kontrolka ListView ..........................................................................................3439.1. Wprowadzenie — kontrolka ListView 3439.2. U�ywanie kontrolki ListView do tworzenia aplikacji opartych na listach 3439.3. Tworzenie widoków „brak danych” dla kontrolek ListView 3479.4. Tworzenie zaawansowanych kontrolek ListView z rysunkami i tekstem 3499.5. Stosowanie nag�ówków sekcji w kontrolkach ListView 3529.6. Zachowywanie pozycji w kontrolce ListView 3569.7. Niestandardowy adapter listy 3579.8. Obs�uga zmian orientacji — od warto�ci z kontrolki ListView
po wykresy w orientacji poziomej 360
10. Multimedia .................................................................................................................. 36710.1. Wprowadzenie — multimedia 36710.2. Odtwarzanie filmów z serwisu YouTube 36710.3. U�ywanie obiektu Gallery wraz z kontrolk� ImageSwitcher 36810.4. Rejestrowanie filmów za pomoc� klasy MediaRecorder 37110.5. Jak wykorzysta� androidowy mechanizm wykrywania twarzy? 37310.6. Odtwarzanie muzyki z pliku 37610.7. Odtwarzanie dwi�ku bez interakcji z u�ytkownikiem 37810.8. Konwersja mowy na tekst 38010.9. Konwersja tekstu na mow� 381
11. Utrwalanie danych .....................................................................................................38311.1. Wprowadzenie — utrwalanie danych 38311.2. Pobieranie informacji o plikach 38311.3. Wczytywanie plików z aplikacji, a nie z systemu plików 38611.4. Wy�wietlanie zawarto�ci katalogu 38711.5. Okre�lanie ��cznej ilo�ci pami�ci oraz ilo�ci wolnego miejsca na karcie SD 39011.6. Prosty sposób tworzenia aktywno�ci do ustawiania preferencji
u�ytkownika 39011.7. Sprawdzanie poprawno�ci ustawie� 39411.8. Zaawansowane wyszukiwanie tekstu 39611.9. Tworzenie bazy SQLite w aplikacji na Android 401
11.10. Wstawianie danych do bazy SQLite 40211.11. Wczytywanie warto�ci z istniej�cej bazy SQLite 40211.12. Praca z datami w bazie SQLite 40311.13. Przetwarzanie danych w formacie JSON za pomoc� klasy JSONObject 40611.14. Przetwarzanie dokumentów XML za pomoc� interfejsu DOM API 40711.15. Przetwarzanie dokumentów w formacie XML z wykorzystaniem
interfejsu XmlPullParser 409
10 � Spis tre�ci
11.16. Dodawanie danych kontaktowych 41211.17. Wczytywanie danych kontaktowych 415
12. Aplikacje do obs�ugi po��cze� telefonicznych .......................................................... 41712.1. Wprowadzenie — aplikacje do obs�ugi po��cze� telefonicznych 41712.2. Wykonywanie operacji w momencie, gdy dzwoni telefon 41812.3. Przetwarzanie wychodz�cych po��cze� telefonicznych 42112.4. Wybieranie numeru telefonu 42412.5. Wysy�anie jedno- lub wielocz��ciowych wiadomo�ci SMS 42512.6. Odbieranie wiadomo�ci SMS w aplikacjach na Android 42812.7. Wysy�anie wiadomo�ci SMS do emulatora za pomoc� okna
Emulator Control 42912.8. Korzystanie z androidowej klasy TelephonyManager do pobierania
informacji o urz�dzeniu 430
13. Aplikacje sieciowe ...................................................................................................... 44113.1. Wprowadzenie — sie� 44113.2. Stosowanie us�ug sieciowych typu RESTful 44213.3. U�ywanie wyra�e� regularnych do wyodr�bniania informacji
z nieustrukturyzowanego tekstu 44413.4. Przetwarzanie danych z kana�ów RSS i Atom za pomoc� parsera ROME 44613.5. Korzystanie ze skrótów MD5 do przetwarzania zwyk�ego tekstu 45013.6. Przekszta�canie tekstu na odno�niki 45113.7. Dost�p do stron internetowych za pomoc� kontrolki WebView 45213.8. Modyfikowanie wygl�du kontrolki WebView 453
14. Gry i animacje .............................................................................................................45514.1. Wprowadzenie — gry i animacje 45514.2. Tworzenie gier na Android za pomoc� frameworku flixel-android 45614.3. Tworzenie gry na Android za pomoc� narz�dzia AndEngine
(Android-Engine) 45814.4. Przetwarzanie danych wej�ciowych wprowadzonych w okre�lonym czasie 464
15. Sieci spo�eczno�ciowe ................................................................................................46715.1. Wprowadzenie — sieci spo�eczno�ciowe 46715.2. Integrowanie aplikacji z sieciami spo�eczno�ciowymi za pomoc�
protoko�u HTTP 46715.3. Wczytywanie chronologicznych list tweetów za pomoc� formatu JSON 470
16. Lokalizacja i mapy .......................................................................................................47316.1. Wprowadzenie — aplikacje wykorzystuj�ce lokalizacj� 47316.2. Pobieranie danych o lokalizacji 47316.3. Dost�p do danych z GPS-a w aplikacjach 475
Spis tre�ci � 11
16.4. Podawanie fikcyjnych wspó�rz�dnych GPS w urz�dzeniu 47716.5. Geokodowanie i geokodowanie odwrotne 47916.6. Przygotowania do korzystania z map Google’a 48016.7. Wy�wietlanie aktualnej lokalizacji urz�dzenia na mapach Google’a 48616.8. Wy�wietlanie znacznika lokalizacji w widoku MapView 48716.9. Wy�wietlanie kilku znaczników w widoku MapView 490
16.10. Tworzenie warstw dla widoku MapView 49516.11. Zmienianie trybów widoku MapView 49616.12. Wy�wietlanie ikony na warstwie bez korzystania z obiektów Drawable 49716.13. Implementowanie wyszukiwania lokalizacji na mapach Google’a 50116.14. Wy�wietlanie widoku MapView w kontrolce TabView 50316.15. Obs�uga d�ugich klikni�� w widokach MapView 50516.16. Korzystanie z map OpenStreetMap 50916.17. Tworzenie warstw dla map OSM 51116.18. Stosowanie skali w mapach OSM 51316.19. Obs�uga dotkni�� warstwy mapy OSM 51416.20. Aktualizowanie lokalizacji na mapach OSM 516
17. Akcelerometr .............................................................................................................. 52117.1. Wprowadzenie — czujniki 52117.2. Wykrywanie obecno�ci lub braku czujnika 52117.3. Wykorzystywanie akcelerometru do wykrywania potrz�sania
urz�dzeniem 52217.4. U�ywanie akcelerometru do sprawdzania, czy ekran skierowany
jest w dó�, czy w gór� 52617.5. Okre�lanie u�o�enia telefonu z Androidem za pomoc� czujnika orientacji 52717.6. Odczyt wskaza� czujnika temperatury 528
18. Bluetooth .................................................................................................................... 53118.1. Wprowadzenie — Bluetooth 53118.2. W��czanie Bluetootha i umo�liwianie wykrywania urz�dzenia 53218.3. Pod��czanie urz�dzenia z Bluetoothem 53318.4. Oczekiwanie na ��dania po��czenia Bluetooth oraz ich akceptowanie 53618.5. Implementowanie wykrywania urz�dze� z Bluetoothem 537
19. Sterowanie systemem i urz�dzeniem ........................................................................53919.1. Wprowadzenie — sterowanie systemem i urz�dzeniem 53919.2. Dost�p do informacji o sieci i po��czeniu 53919.3. Pobieranie informacji z pliku manifestu 54019.4. Zmienianie trybu dzwonka telefonu na cichy, wibracje lub normalny 54119.5. Kopiowanie tekstu i pobieranie go ze schowka 54219.6. Powiadomienia oparte na diodach LED 544
12 � Spis tre�ci
19.7. W��czanie wibracji w urz�dzeniu 54419.8. Uruchamianie polece� pow�oki z poziomu aplikacji 54519.9. Okre�lanie, czy dana aplikacja jest uruchomiona 546
20. Inne j�zyki programowania i frameworki .................................................................54920.1. Wprowadzenie — inne j�zyki programowania 54920.2. Uruchamianie zewn�trznych, natywnych instrukcji Uniksa i Linuksa 55020.3. Uruchamianie kodu natywnego w j�zyku C lub C++ za pomoc�
interfejsu JNI z pakietu NDK 55120.4. Wprowadzenie do aplikacji Scripting Layer for Android
(SL4A; wcze�niej Android Scripting Environment) 55620.5. Tworzenie alertów za pomoc� biblioteki SL4A 55820.6. Pobieranie dokumentów Google i wy�wietlanie ich w kontrolce
ListView za pomoc� biblioteki SL4A 56220.7. U�ywanie kodów QR do rozpowszechniania skryptów SL4A 56320.8. U�ywanie JavaScriptu do wykorzystania wbudowanych funkcji telefonu
poprzez kontrolk� WebView 56620.9. Tworzenie aplikacji niezale�nych od platformy za pomoc� frameworku
PhoneGap 568
21. �a�cuchy znaków i internacjonalizacja ......................................................................57121.1. Wprowadzenie — internacjonalizacja 57121.2. Internacjonalizacja tekstu aplikacji 57221.3. Wyszukiwanie i t�umaczenie �a�cuchów znaków 57521.4. Niuanse zwi�zane z plikami strings.xml 577
22. Tworzenie pakietów, instalowanie, dystrybucja i sprzeda� aplikacji .....................58322.1. Wprowadzenie — tworzenie pakietów, instalowanie i dystrybucja 58322.2. Tworzenie certyfikatu u�ywanego przy podpisywaniu 58322.3. Podpisywanie aplikacji 58622.4. Udost�pnianie aplikacji w sklepie Google Play (dawny Android Market) 58722.5. Integrowanie sieci AdMob z aplikacj� 58822.6. Zaciemnianie i optymalizowanie kodu za pomoc� ProGuarda 59222.7. Odno�niki do aplikacji ze sklepu Google Play 595
Skorowidz .............................................................................................................................599
367
ROZDZIA� 10.
Multimedia
10.1. Wprowadzenie — multimediaIan Darwin
OmówienieAndroid to �rodowisko multimedialne. Standardowo obejmuje odtwarzacze muzyki i filmów,a wi�kszo�� komercyjnych urz�dze� obok domy�lnych narz�dzi obejmuje te� ich bardziejwymy�lne odpowiedniki, a tak�e odtwarzacze filmów z serwisu YouTube i inne podobneaplikacje. Z receptur z tego rozdzia�u dowiesz si�, jak sterowa� wybranymi aspektami �wiatamultimediów w Androidzie.
10.2. Odtwarzanie filmów z serwisu YouTubeMarco Dinacci
ProblemProgramista chce w urz�dzeniu umo�liwi� odtwarzanie filmów z serwisu YouTube.
Rozwi�zanieNa podstawie identyfikatora URI filmu nale�y utworzy� obiekt Intent z akcj� ACTION_VIEWi uruchomi� now� aktywno��.
OmówienieNa listingu 10.1 pokazano kod potrzebny do uruchomienia filmu z serwisu YouTube za po-moc� intencji.
368 � Rozdzia� 10. Multimedia
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.getQueryParameter("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�ImageSwitcherNidhin Jose Davis
ProblemProgramista chce utworzy� interfejs u�ytkownika do przegl�dania kolekcji rysunków.
Rozwi�zaniePo��dany efekt mo�na uzyska� dzi�ki zastosowaniu obiektu Gallery wraz z kontrolk� ImageSwitcher.
OmówienieMo�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
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"
10.3. U�ywanie obiektu Gallery wraz z kontrolk� ImageSwitcher � 369
android:layout_width="fill_parent" android:layout_height="fill_parent" >
<ImageSwitcher 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" />
<Gallery 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" />
</RelativeLayout>
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<Drawable> allimages = new ArrayList<Drawable>();
@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));
370 � Rozdzia� 10. Multimedia
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; } }}
10.4. Rejestrowanie filmów za pomoc� klasy MediaRecorder � 371
10.4. Rejestrowanie filmów za pomoc� klasyMediaRecorderMarco Dinacci
ProblemProgramista chce za pomoc� wbudowanej kamery rejestrowa� filmy i zapisywa� je na dysku.
Rozwi�zanieNale�y zarejestrowa� film i zapisa� go w telefonie za pomoc� klasy MediaRecorder z framewor-ku Androida.
OmówienieDo nagrywania dwi�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(); } } } }); }
372 � Rozdzia� 10. Multimedia
Klatki z podgl�dem filmu s� wy�wietlane w widoku SurfaceView. Do sterowania nagrywaniems�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 pokazanona 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 obiektuMediaRecorder. 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 odbiornikSurfaceHolder.Callback. Ponadto w kodzie przes�oni�to metod� surfaceCreated. Aplikacja wy-wo�uje w niej kod do inicjowania procesu nagrywania.
10.5. Jak wykorzysta androidowy mechanizm wykrywania twarzy? � 373
@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 mechanizmwykrywania twarzy?Wagied Davids
ProblemProgramista chce, aby aplikacja wykrywa�a, czy na danym zdj�ciu znajduj� si� ludzkie twarze,a je�li tak, to gdzie.
Rozwi�zanieNale�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 tojedno 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�cejak twarz, natomiast nie okre�la, do kogo ona nale�y. Dopiero w wersji Ice Cream Sandwich
374 � Rozdzia� 10. Multimedia
(Android 4.0) wprowadzono funkcj� rozpoznawania twarzy, któr� mo�na wykorzysta� doodblokowywania telefonu.
OmówienieG�ó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 programuzdj�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 */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(new FaceDetectionView(this, "face5.JPG"));}}
FaceDetectionView to niestandardowa klasa, s�u��ca do zarz�dzania wykrywaniem twarzyz 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 onametod� 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 nalistingu 10.7, a na rysunku 10.1 widoczny jest efekt dzia�ania aplikacji.
Rysunek 10.1. Wykrywanie twarzy w praktyce
10.5. Jak wykorzysta androidowy mechanizm wykrywania twarzy? � 375
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);
376 � Rozdzia� 10. Multimedia
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 plikuMarco Dinacci
ProblemProgramista chce odtwarza� pliki dwi�kowe przechowywane w urz�dzeniu.
Rozwi�zanieNale�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ówienieOdtwarzanie plików muzycznych jest proste — wystarczy skonfigurowa� obiekty MediaPlayeri MediaController.
10.6. Odtwarzanie muzyki z pliku � 377
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 — odtwarzaje, 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 plikró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() {
378 � Rozdzia� 10. Multimedia
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 obiektuMediaController po dotkni�ciu ekranu przez u�ytkownika.
Poniewa� obiekt MediaController tworzony jest programowo, uk�ad aktywno�ci jest bardzoprosty:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/audioView" ></LinearLayout>
10.7. Odtwarzanie d�wi�ku bez interakcjiz u�ytkownikiemIan Darwin
ProblemProgramista chce, aby aplikacja odtwarza�a pliki dwi�kowe bez interakcji z u�ytkownikiem.
10.7. Odtwarzanie d�wi�ku bez interakcji z u�ytkownikiem � 379
Rozwi�zanieAby odtwarza� pliki dwi�kowe bez interakcji z u�ytkownikiem (bez kontrolek do zmianyg�o�no�ci, wstrzymywania odtwarzania itd.), wystarczy utworzy� obiekt MediaPlayer dla da-nego pliku i wywo�a� metod� start().
OmówienieJest to najprostsza technika odtwarzania plików dwi�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 dwi�-kowe, nie musisz udost�pnia� takich kontrolek.
Dla pliku trzeba utworzy� obiekt MediaPlayer. Plik dwi�kowy mo�e znajdowa� si� na karcieSD lub w katalogu res/raw aplikacji. Je�li plik dwi�kowy jest elementem programu, nale�yumie�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 automatyczniewywo�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, "Zakoczono 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 MediaPlayeri nie zwalnia pami�ci, mo�e nast�pi� wyczerpanie zasobów.
Zobacz tak�eAby wykorzysta� wszystkie mo�liwo�ci obiektu MediaPlayer, nale�y pozna� jego ró�ne stanyi przej�cia mi�dzy nimi. Pomaga to zrozumie�, które metody mo�na wywo�ywa�. Na stroniehttp://developer.android.com/reference/android/media/MediaPlayer.html znajdziesz kompletny dia-gram stanów obiektu MediaPlayer.
380 � Rozdzia� 10. Multimedia
10.8. Konwersja mowy na tekstCorey Sunwold
ProblemProgramista chce, aby aplikacja rejestrowa�a mow� i przetwarza�a j� jako tekst.
Rozwi�zanieJedn� 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ówienieAndroid 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 zwracanewyniki 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�
10.9. Konwersja tekstu na mow� � 381
*/ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RECOGNIZER_RESULT && resultCode == RESULT_OK) { ArrayList<String> 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�ehttp://developer.android.com/reference/android/speech/RecognizerIntent.html.
10.9. Konwersja tekstu na mow�Ian Darwin
ProblemProgramista 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�zanieNale�y zastosowa� interfejs API TextToSpeech.
OmówienieInterfejs API TextToSpeech wbudowany jest w Android, cho� w niektórych wersjach platfor-my trzeba doinstalowa� pliki dwi�kowe.
Aby rozpocz�� korzystanie z omawianego mechanizmu, potrzebny jest tylko obiekt TextToSpeech. 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. Jednapowinna 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 powinienwygl�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�.
382 � Rozdzia� 10. Multimedia
Listing 10.13. Program ilustruj�cy konwersj� tekstu na mow�
public class Main extends Activity implements OnInitListener {
private TextToSpeech myTTS; private List<String> phrases = new ArrayList<String>();
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�ezaimplementowany 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 tylkogeneruje s�owa. W bardziej rozbudowanym programie warto uruchomi� w�tek lub us�ug�do obs�ugi mowy.
599
Skorowidz
AADB, 37AdMob, 589akcelerometr, 521
czujniki, 521dost�pno�� czujnika, 522executeShakeAction(), 525getSensorList(), 522isAccelerationChanged(), 525onAccuracyChanged(), 527onSensorChanged(), 523, 526, 527orientacji, 527SensorManager, 522temperatury, 528wykorzystywanie danych, 524
alerty, 315komunikaty toast, 336powiadomienia, 337
dwi�k, 339reakcja na klikni�cie, 342powiadomienie, 341w��czanie diody LED, 340wy�wietlanie, 338
przetwarzanie w tle, 330Python, 558Service, 338wyskakuj�ce okna dialogowe, 321
AlertDialog, 321, 532AndEngine, 458Android, 13
akcelerometr, 521czujniki, 521
animacje, 455aplikacje, 35
awarie, 125Backup Manager, 102cykl �ycia, 35dostosowywanie do tabletów, 94
formatowanie czasu i daty, 97Google Analytics, 90kontrolowanie danych wej�ciowych, 99latarka, 92lokalizacja, 473mapy, 473menu kontekstowe, 75menu opcji, 75monitorowanie poziomu baterii, 83mo�liwe stany, 35obs�uga po��cze� telefonicznych, 417obs�uga wyj�tków, 76projektowanie, 73sieciowe, 441singleton, 79stoper z odliczaniem wstecznym, 55stosowanie wskazówek, 108Tipster, 57tworzenie ekranów powitalnych, 84tworzenie kopii zapasowej, 102wspó�u�ytkowanie danych, 80wymagania, 73zmiana orientacji ekranu, 81zrzutu ekranu, 54
biblioteki, 41AndroidPlot, 41, 207HttpClient, 442, 443OpenStreetMap, 41RGraph, 224
Bluetooth, 531pod��czanie innego urz�dzenia, 533w��czanie, 532wykrywanie urz�dze�, 537��dania po��cze�, 536
cykl �ycia, 35diagram stanów, 36
ekran powitalny, 86formatowanie liczb, 277
Double.toString(), 277kody formatuj�ce, 278
600 � Skorowidz
Androidformatowanie liczb
liczba mnoga, 281metody formatuj�ce, 278
fragment, 305g�sto�� ekranu, 74grafika, 185
animacja rastrowa, 228animacje, 455niestandardowa czcionka, 185, 188OpenGL ES, 185, 188paleta kolorów, 216przybli�anie obrazu, 230rysowanie p�ynnych linii, 194skanowanie kodów, 204t�o domy�lnego widoku, 221trójwymiarowa, 188tworzenie ikony, 208, 215tworzenie wykresów, 224wy�wietlanie danych, 207zdj�cia, 198, 200
gry, 455frameworki, 455
GUI, 58, 235alerty, 315animacja, 269czas, 322ekran wczytywania, 291komponenty, 58kontrolka ListView, 343lista rozwijana, 251menu, 316niestandardowe okno dialogowe, 328obrotowy mechanizm wybierania, 325obs�uga d�ugiego klikni�cia, 253obs�uga zmian konfiguracji, 238odbiornik zdarze�, 242otwieranie nowego ekranu, 283pole wyboru, 247przekszta�canie pól tekstowych, 260przycisk wysy�ania, 262przyciski graficzne, 249przyciski opcji, 247tworzenie przycisku, 241wid�et, 236wid�et aplikacji, 236wykrywanie gestów, 299wy�wietlanie pól tekstowych, 254zakrywanie innych komponentów, 292
internacjonalizacja, 571�a�cuchy znaków, 575tekst aplikacji, 572
Java, 19pakiet JDK, 29
pomijane interfejsy API, 20RGraph, 224�rodowisko IDE Eclipse, 29
kana�y danych, 76komunikacja, 145
AsyncTask, 145dostawcy tre�ci, 175, 178e-mail, 147intencje, 145IPC, 179komponenty obs�ugi, 145komunikaty rozg�oszeniowe, 157odbiorniki rozg�oszeniowe, 145podtrzymywanie dzia�ania us�ugi, 155przekazywanie �a�cuchów znaków, 151u�ywanie w�tków, 159
kontrolki, 59rozmieszczanie, 59
mechanizmy wprowadzania danych, 75multimedia, 367
Gallery, 368mechanizm wykrywania twarzy, 373odtwarzanie plików muzycznych, 377rejestrowanie filmów, 371YouTube, 367
NinePatch, 221pakiet ADK, 21pakiet SDK, 24
aktualizacja, 46przyk�adowe programy, 44wtyczka ADT, 29
sterowanie, 539kopiowanie tekstu, 542mened�er aktywno�ci, 547polecenia pow�oki, 545po��czenie z sieci�, 539tryb dzwonka, 541ustawienia projektu, 540w��czanie wibracji, 544wy�wietlanie powiadomie�, 544
�rodowisko Eclipse, 24parametry nowego projektu, 25tworzenie nowego projektu, 45uruchamianie projektu, 27
testy, 111awarie, 125BugSense, 129chmura, 121cykl �ycia, 134debugowanie kodu, 128konfigurowanie urz�dze� AVD, 112lokalny dziennik czasu wykonania, 131projekt testowy, 122sterowanie programowaniem, 111
Skorowidz � 601
urz�dzenia AVD, 23konfigurowanie, 112
utrwalanie danych, 383baza SQLite, 401, 402, 403dodawanie danych kontaktowych, 412pobieranie informacji o plikach, 383ustawianie preferencji, 390wczytywanie danych kontaktowych, 415wczytywanie plików z aplikacji, 386wyszukiwanie tekstu, 396wy�wietlanie zawarto�ci katalogu, 387
wielko�� ekranu, 74Windows, 29
�rodowisko IDE Eclipse, 29wtyczka ADT, 24wy�wietlanie czasu i daty, 97
DateFormat, 97DateUtils, 99Formatter, 99java.util.Date, 98TextView, 97Time, 99
zachowywanie danych, 81getLastNonConfigurationInstance(), 81onCreate(), 82onRetainNonConfigurationInstance(), 81onSaveInstanceState(), 81
zdalna us�uga, 179bindService(), 181invokeService(), 182onBind(), 179onCreate(), 180onDestroy(), 180releaseService(), 182startService(), 181stopService(), 182
zrzut ekranu, 52Device Screen Capture, 53
Android Compatibility, 305Android Localizer, 575aplikacje, 35
akcelerometrczujnik orientacji, 527dost�pno��, 522pobieranie danych, 523wykorzystywanie danych, 524
awarie, 125adb logcat, 125NPE, 126
Backup Manager, 102implementacja, 102polecenie bmgr, 107
Bluetoothakceptowanie po��cze�, 536pobieranie adresu MAC, 532pobieranie nazwy urz�dzenia, 532tworzenie serwera, 536wymiana danych z urz�dzeniem, 534
certyfikat, 583generowanie, 584korzy�ci, 584
cykl �yciarejestrowanie zdarze�, 135
dostawca tre�ci, 178dostosowywanie do tabletów, 94Google Analytics, 90Java
kod natywny, 552j�zyk C
kod natywny, 553kontrolka ListView, 343
nag�ówki sekcji, 352obs�uga zmian orientacji, 360wy�wietlanie listy wierszy, 344zachowywanie pozycji, 356
kontrolowanie danych wej�ciowych, 99KeyListener, 99typy odbiorników, 102
konwersja tekstu na mow�, 382kopia zapasowa, 102
Backup Manager, 102latarka, 92
etapy rozwijania, 92lokalizacja, 473
aktualizowanie lokalizacji, 474fikcyjne wspó�rz�dne GPS, 477geokodowanie, 479geokodowanie odwrotne, 480OpenStreetMap, 473pobieranie danych o lokalizacji, 474podawanie fikcyjnej lokalizacji, 478urz�dzenia GPS, 473
mapy, 473mapy Google’a, 480
AddressOverlay, 495ItemizedOverlay, 491MapTest, 481MyOverlay, 488obs�uga d�ugich klikni��, 506wyszukiwanie lokalizacji, 502wy�wietlanie ikony, 499wy�wietlanie warstwy, 495
menu kontekstowe, 75menu opcji, 75
602 � Skorowidz
aplikacjeobs�uga po��cze� telefonicznych, 417
pobieranie danych, 430po��czenia przychodz�ce, 418, 420po��czenia wychodz�ce, 421wiadomo�ci SMS, 425wybieranie numeru telefonu, 424
odbiornik dotyku, 231odno�niki, 595OpenStreetMap, 509
aktualizowanie lokalizacji, 517obs�uga dotkni�� warstwy, 515
optymalizowanie kodu, 593pobieranie dokumentów Google, 562podpisywanie, 586projektowanie, 73
ekrany powitalne, 84formatowanie czasu i daty, 97funkcje urz�dzenia, 75kana�y danych, 76kontrolowanie danych wej�ciowych, 99latarka, 92mechanizmy wprowadzania danych, 75obs�uga wyj�tków, 76odbiornik rozg�oszeniowy, 83wielko�� i g�sto�� ekranu, 74
przekszta�canie wyj�tków, 78rozpoznawanie mowy, 380sieciowe, 441
parser danych, 446przekszta�canie tekstu, 450, 451RESTful, 442wyra�enia regularne, 444wy�wietlanie stron internetowych, 452
skanowanie kodów, 204SCAN_FORMATS, 206SCAN_MODE, 206
SL4A, 556�ledzenie korzystania, 90, 91
Google Analytics, 90udost�pnianie, 587
przesy�anie, 587rejestrowanie, 587
wspó�u�ytkowanie danych, 80wykrywanie gestów, 299wymagania, 73wy�wietlanie danych, 207wy�wietlanie reklam, 588zaciemnianie kodu, 593
aplikacje sieciowe, 441parser danych, 446
getRSS(), 447przekszta�canie tekstu, 450
kontrolka TextView, 451MD5, 450na odno�niki, 451na posta� nieczyteln�, 450
stosowanie RESTful, 442converse(), 442HTTP GET, 442HTTP POST, 442klient us�ugi, 443URL, 442URLConnection, 442
wyra�enia regularne, 444BookRank, 445
wy�wietlanie stron internetowych, 452kontrolka WebView, 452
BBluetooth, 531
pod��czanie innego urz�dzenia, 533wymiana danych z urz�dzeniem, 534
w��czanie, 532AlertDialog, 532isEnabled(), 532konfigurowanie, 533onActivityResult(), 532pobieranie adresu MAC, 532pobieranie nazwy, 532
wykrywanie urz�dze�, 537tryb parowania, 537
��dania po��cze�, 536akceptowanie po��cze�, 536listenUsingRfcommWithServiceRecord(), 536start(), 536tworzenie serwera, 536
BugSense, 129
Ccykl �ycia, 35
android.Activity, 35diagram stanów, 36rejestrowanie zdarze�, 135
Ddane, 383
baza SQLite, 401data i czas, 403insert(), 402moveToFirst(), 403moveToNext(), 403
Skorowidz � 603
danebaza SQLite
onCreate(), 401pobieranie danych, 402query(), 403SQLiteOpenHelper, 401strftime(), 403tworzenie, 401zapisywanie danych, 402
informacje o plikach, 383File, 384metody zwracaj�ce informacje, 384
JSON, 406generowanie danych, 406przetwarzanie �a�cucha znaków, 407
kontaktowe, 412addContact(), 413dodawanie danych, 412pobieranie danych, 415
parser danych, 446pobieranie, 430
akcelerometr, 523baza SQLite, 402dane kontaktowe, 415,dostawcy tre�ci, 175lokalizacja, 574po��czenia telefoniczne, 430TelephonyManager, 430
pojemno�� karty SD, 390ustawianie preferencji, 390
domy�lne, 394getBoolean(), 393getDefaultSharedPreferences(), 393getString(), 393onCreate(), 392onSharedPreferenceChanged(), 394PreferenceActivity, 394PreferenceCategory, 391PreferenceScreen, 391, 392
wczytywanie plików z aplikacji, 386openRawResource(), 387
wyszukiwanie tekstu, 396DbAdapter, 396
wy�wietlanie zawarto�ci katalogu, 387accept(), 389FilenameFilter, 389kontrolka ListView, 388listFiles(), 388
XML, 407interfejs DOM API, 407interfejs XmlPullParser, 409newInstance(), 410newPullParser(), 410
przetwarzanie kodu, 408require(), 411statyczne zasoby, 411
dokumenty Google, 562lista dokumentów, 564pobieranie, 562
dostawcy tre�ci, 175, 178MyContantProvider, 177pobieranie danych, 175
getContentResolver(), 177onActivityResult(), 176query(), 177
D-pad, 192Droid, 185, 186
EEDGE, 441
FFacebook, 467fragment, 305frameworki, 455, 549
AndEngine, 458AppCelerator Titanium, 549Flixel, 456PhoneGap, 549, 568
GGallery, 368geokodowanie, 479gesty dotykowe, 230
odbiornik dotyku, 231Google Analytics, 90Google Play, 587GPRS, 441graficzny interfejs u�ytkownika, Patrz GUIgrafika, 185
animacja rastrowa, 228onWindowFocusChanged(), 229start(), 229
niestandardowa czcionka, 185, 188Iceberg, 186OTF, 186TTF, 186Typeface.create(), 186ustawianie, 187
OpenGL ES, 185przybli�anie obrazu, 230
odbiornik dotyku, 231
604 � Skorowidz
grafikarysowanie p�ynnych linii, 194
expandDirtyRect(), 195getHistoricalX(int), 195getHistoricalY(int), 195getHistorySize(), 194invalidate(), 195TouchEvent, 194
skanowanie kodów, 204SCAN_FORMATS, 206SCAN_MODE, 206
t�o domy�lnego widoku, 221kontrolka EditText, 222
trójwymiarowa, 188buffer.position(0), 191D-pad, 192obracanie sze�cianu, 192onDrawFrame(), 190onSurfaceChanged(), 190requestFocus(), 194setFocusableInTouchMode(), 194wy�wietlanie sze�cianu, 190
tworzenie ikony, 208, 215formaty ikon, 220obramowanie, 217paleta kolorów, 216PNG, 209SVG, 210wielko��, 210wymiary grafiki, 217wymiary ikon, 217
tworzenie wykresów, 224RGraph, 224
wy�wietlanie danych, 207AndroidPlot, 207
zdj�cia, 198, 200android.media.Camera, 200configure(), 202onActivityResult(), 199surfaceChanged(), 202
gry, 455frameworki, 455
AndEngine, 458Flixel, 456
GUI, 235, 238alerty, 315
AlertDialog, 321komunikaty toast, 336powiadomienia, 337przetwarzanie w tle, 330wyskakuj�ce okna dialogowe, 321
animacja, 269getCurrentFocus(), 269kod animacji, 269onClick(), 269
autouzupe�nianie tekstu, 257, 258AutoCompleteTextView, 257onTextChanged(), 258
czas, 322kontrolka Timepicker, 323ustawianie czasu, 324
do��czanie odbiornika zdarze�, 242anonimowa klasa wewn�trzna, 244implementacja aktywno�ci, 244interfejs jako typ, 243klasa sk�adowa, 243klasa wewn�trzna, 242new OnClickListener(){...}, 243
dotykowe informacje zwrotne, 270oparte na wibracjach, 271zdarzenia generuj�ce, 272
dzia�anie widoków, 249ekran wczytywania, 291
LoadingScreen, 292fragment, 305IDE Eclipse, 235
SWT, 235Java ME, 235Java SE, 235
Swing, 235kontrolka ListView, 343
brak danych, 347nag�ówki sekcji, 352obs�uga zmian orientacji, 360pusta lista, 348stronicowanie, 344wy�wietlanie listy wierszy, 344zachowywanie pozycji, 356
lista rozwijana, 251Adapter, 251getSelectedItem(), 252kontrolka Spinner, 251toString(), 252
menu, 316addSubMenu(), 319definicja, 316niestandardowe menu, 317obs�uga wyboru opcji, 317onCreateOptionsMenu(), 316, 319onOptionsItemSelected(), 317, 320pocz�tkowe menu, 320podmenu, 318, 321tworzenie, 316wy�wietlanie, 316
niestandardowe okno dialogowe, 328Dialog, 328okno O programie, 333, 336okno ProgressDialog, 330
Skorowidz � 605
run(), 330z zak�adkami, 331
niestandardowy pasek tytu�u, 275, 277obramowanie, 296
kolor, 297kszta�t, 297z zaokr�glonymi rogami, 298
obrotowy mechanizm wybierania, 325dzia�anie, 325kontrolki Android-Wheel, 325
obs�uga d�ugiego klikni�cia, 253setLongClickable(), 253setOnLongClickListener(), 253
obs�uga zmian konfiguracji, 238refreshUI(), 240zachowywanie stanu aplikacji, 240
otwieranie nowego ekranu, 283kontrolka Button, 287kontrolka TextView, 286nast�pne okno aplikacji, 290pierwszy ekran, 290warunki, 285wid�et aplikacji, 284
pole wyboru, 247przechwytywanie klawiszy, 264
onKeyDown, 264przekszta�canie pól tekstowych, 260prze��czanie aktywno�ci, 273przyciski
graficzne, 249opcji, 247tworzenie, 241wysy�ania, 262
stosowanie kontrolek, 246RadioGroup, 247Spinner, 246ViewGroup, 247
TableLayout, 63tworzenie przycisku, 241
onCreate(), 241setOnClickListener(), 241
wid�et, 236wid�et aplikacji, 236, 311wykrywanie gestów, 299
GestureDetector, 299onTouchEvent, 299
wy�wietlanie pól tekstowych, 254addTextChangedListener(), 256afterTextChanged(), 256beforeTextChanged(), 256EditText, 254, 255onCreate(), 256onTextChanged(), 256TextView, 254
zakrywanie innych komponentów, 292DrawerButton, 294SlidingDrawer, 293, 295
zaznaczanie grup, 265kontrolka RatingBar, 265onRatingChanged, 266RatingBar, 265
IIDE Eclipse, 29, 235
SWT, 235Inkscape, 209, 228
Document Properties, 212Export Bitmap, 211, 213, 229SVG, 210
instrukcjeadb logcat, 125create project, 21
generowane elementy, 22lista argumentów, 22
Intent.createChooser, 151Intent.putExtra(), 151
intencjaintencja rozg�oszeniowa, 428intencje, 146
e-mailz poziomu widoku, 147z za��cznikami, 150
Intent, 146robienie zdj��, 198w��czenie Bluetootha, 532wybieranie numeru telefonu, 424
internacjonalizacja, 571Locale, 571�a�cuchy znaków, 572
wyszukiwanie, 575tekst aplikacji, 572
wersje regionalne, 574
JJava, 19
bibliotekiRGraph, 224
definiowanie nowej klasy, 288HTML5, 566
kod mostu, 567interfejsy API, 20kod natywny, 552metody formatuj�ce, 278obs�uga wyj�tków, 76
Exception, 77IOException, 77
606 � Skorowidz
Javaobs�uga wyj�tków
kontrolowane, 76niekontrolowane, 76przekszta�canie wyj�tków, 77RuntimeException, 77Throwable, 77VMError, 77
pakiet JDK, 29parser ROME, 446�rodowisko IDE Eclipse, 29
j�zyki programowania, 549C, 549
kod natywny, 551, 553Clojure, 549Erlang, 549F#, 549Groovy, 549HTML5, 566Scala, 549Scheme, 549skryptowe, 556
aplikacja SL4A, 556BeanShell, 556JavaScript, 557JRuby, 557Lua, 556Perl, 556Python, 556Tcl, 557
JSON, 406
Kkeytool, 584klasy
AboutBox, 333, 334ActivityInstrumentationTestCase2, 124Adapter, 251, 350AddressOverlay, 495AlertDialog, 71, 321android.Activity, 35android.app.Activity, 64android.app.Application, 79android.media.Camera, 200AndroidPlot, 207ArrayAdapter, 350AsyncTask, 145, 161, 164BaseAdapter, 358BookRank, 445BugSenseHandler, 130ChoiceFormat, 282CountDownTimer, 55
Cube, 190CustomDialog, 331DateFormat, 97DateUtils, 99DbAdapter, 396DemoCharts, 363Dialog, 328EditText, 254Exception, 77FaceDetectionView, 374File, 384
metody zwracaj�ce informacje, 384FileSaver, 82Formatter, 99FragmentTestActivity, 306Geocoder, 479GestureDetector, 299Handler, 167IncomingCallInterceptor, 419Intent, 146IOException, 77ItemizedOverlay, 490java.util.Date, 98KeyListener, 99ListActivity, 349LoadingScreen, 292Locale, 571MapTest, 481MapView, 481MD5, 450MediaRecorder, 371MetarItem, 498MyContantProvider, 177MyLocationListener, 475MyLocationOverlay, 486MyOverlay, 488OutgoingCallInterceptor, 421PackageInfo, 333ProgressDialog, 164RatingBar, 265
w�a�ciwo�ci, 265Runnable, 159Runtime, 545RuntimeException, 77RuntimeLog, 131
kod, 132ScaleBarOverlay, 513SensorManager, 522Service, 155ServiceManager, 158sk�adowa, 243SlidingDrawer, 292SmsManager, 426
Skorowidz � 607
SQLiteOpenHelper, 401StatFs, 390TelephonyManager, 430TestFragment, 307TextView, 254Thorwable, 77
hierarchia, 77Thread, 159Throwable, 77TicTacToeActivity, 239TicTacToeGame, 240Time, 99TouchEvent, 194TrackService, 156URL, 442URLConnection, 442View, 64, 194WebSettings, 453wewn�trzna, 242
anonimowa, 244komponenty obs�ugi, 145komunikacja, 145
dostawcy tre�ci, 175, 178pobieranie danych, 175
e-mail, 147Intent.createChooser, 151z poziomu widoku, 147z za��cznikami, 150
intencje, 146e-mail, 147, 150Intent, 146
IPC, 179zdalne us�ugi, 179
komponenty obs�ugi, 145, 167komunikaty rozg�oszeniowe, 157
kod klasy odbiornika, 158publikowanie rozg�aszanych zdarze�, 157rejestrowanie odbiornika, 157ServiceManager, 158tworzenie odbiornika, 157
odbiorniki rozg�oszeniowe, 145operacje w tle, 160
AsyncTask, 161, 164doInBackground(), 162execute(), 163onClickListener(), 163onCreate(), 162onCreateDialog(), 164onItemClick(), 162pobieranie receptur, 166ProgressDialog, 164setCancelable(), 164
pobieranie danych, 152
finish(), 154getIntent().getExtras().getString(), 151setResult(), 154z aktywno�ci podrz�dnej, 154
podtrzymywanie dzia�ania us�ugi, 155onBind(), 156onCreate, 155onStartCommand(), 156Service, 155TrackService, 156
przesy�anie danych, 151Intent.getExtras(), 153Intent.putExtra(), 151MySubActivity.finish(), 153onActivityResult(), 153z aktywno�ci, 153
u�ywanie w�tków, 159AsyncTask, 161Handler, 167kolejka w�tków, 167onCreate(), 159, 162onItemClick(), 162przesy�anie komunikatów, 166run(), 159Runnable, 159start(), 159Thread, 159
komunikat rozg�oszeniowy, 420komunikaty toast, 315, 336kontrolki, 59
Android-Wheel, 325AutoCompleteTextView, 257
zape�nianie, 259Button, 287CheckBox, 246EditText, 63, 64, 254, 255, 501
z has�em, 261GridView, 238ImageSwitcher, 368ListView, 293, 343, 388
brak danych, 347DemoCharts, 363dostosowanie zawarto�ci, 357getCount(), 347getItem(), 347getTag(), 345getView(), 358konfigurowanie, 345ListActivity, 349nag�ówki sekcji, 352notifyDataSetChanged(), 360obs�uga zmian orientacji, 360onConfigure(), 363
608 � Skorowidz
kontrolkiListView
pusta lista, 348setListAdapter(), 345stronicowanie, 344wy�wietlanie listy wierszy, 344z ikonami, 349zachowywanie pozycji, 356
RadioButton, 246RadioGroup, 247RatingBar, 265rozmieszczanie, 59ScrollWheel, 326Spinner, 246, 251TableRaw, 60TabView, 503TabWidget, 503TextView, 26, 64, 97, 238, 254, 286, 451Timepicker, 322ViewGroup, 247WebView, 452
modyfikacja wygl�du, 453WheelView, 325
Lliczby, 277
formatowanie, 277kody formatuj�ce, 278metody formatuj�ce, 278
LinkedInem, 468Linuks, 550
polecenia, 550lokalizacja, 473, 571
geokodowanie, 479Geocoder, 479odwrotne, 480
okre�lanie po�o�enia u�ytkownika, 473aktualizowanie lokalizacji, 474fikcyjne wspó�rz�dne GPS, 477informacje z GPS-a, 475MyLocationListener, 475onLocationChanged(), 475pobieranie danych o lokalizacji, 474podawanie fikcyjnej lokalizacji, 478setMockLocation(), 477tryb COARSE, 474tryb FINE, 474
Mmapy, 473
Google’a, 480AddressOverlay, 495aktualna lokalizacja, 486createItem(), 491disableMyLocation(), 486draw(), 490drawCircle(), 500getCenter(), 493invalidate(), 489isRouteDisplayed(), 481ItemizedOverlay, 490ItemizedOverlayXXXdraw(), 497kilka znaczników, 493klikni�cie znacznika, 494konfigurowanie urz�dzenia AVD, 480kontrolka TabView, 503lista kontrolna, 484MapTest, 481MapView, 481MapView.onTouchEvent(), 506MetarItem, 498MetarItem::draw(), 498MyLocationOverlay, 486MyOverlay, 488obs�uga d�ugich klikni��, 505onCreate(), 492populate(), 492rejestrowanie klucza, 483size(), 491TabSpec.setContent(), 503tworzenie nowego projektu, 481tworzenie warstwy, 495wyszukiwanie lokalizacji, 501, 502wy�wietlanie ikony, 499wy�wietlanie warstwy, 495zmiany trybu mapy, 496znacznik lokalizacji, 487znacznik zast�pczy, 493
OpenStreetMap, 509aktualizowanie lokalizacji, 516obs�uga dotkni�� warstwy, 514przesuwanie mapy, 518ScaleBarOverlay, 513skala, 513tworzenie warstw, 511zmiana lokalizacji, 519
Monkey, 140MOTODEV Studio, 576
Skorowidz � 609
multimedia, 367konwersja mowy na tekst, 380konwersja tekstu na mow�, 381mechanizm wykrywania twarzy, 373
detectFaces(), 374FaceDetectionView, 374init(), 374
odtwarzanie filmów, 367YouTube, 368
odtwarzanie plików muzycznych, 377bez interakcji z u�ytkownikiem, 379MediaControler, 377MediaPlayer, 377onCreate(), 377onTouchEvent(), 378porz�dkowanie zasobów odtwarzacza, 378
rejestrowanie filmów, 371initRecorder(), 372MediaRecorder, 371onCreate(), 371surfaceCreated(), 373
Nnag�ówki sekcji, 352narz�dzia
ADB, 37AndEngine, 458android, 21Android Localizer, 575Google Analytics, 90keytool, 584Monkey, 140MOTODEV Studio, 576ProGuard, 592StrictMode, 139
NinePatch, 221
Oobs�uga po��cze� telefonicznych, 417
pobieranie danych, 430okre�lanie stanu telefonu, 431TelephonyManager, 430
przechwytywanie po��cze� przychodz�cych,418, 420IncomingCallInterceptor, 419kod manifestu aplikacji, 419kod przechwytuj�cy, 418odbiornik rozg�oszeniowy, 418
przechwytywanie po��cze� wychodz�cych, 421abortBroadcast(), 423getResultData(), 424
klasa przechwytuj�ca, 421OutgoingCallInterceptor, 421przechwycone po��czenie, 423setResultData(),421, 423
wiadomo�ci SMS, 425kod do wysy�ania, 426odbieranie, 428odebrana wiadomo��, 426onReceive(), 428sendMultipartTextMessage(), 426sendTextMessage(), 426SmsManager, 426wysy�anie, 425, 429
wybieranie numeru, 424odbiorniki rozg�oszeniowe, 83, 145, 418odzyskiwanie, 345OpenGL ES, 185, 187, 455
grafika trójwymiarowa, 188buffer.position(0), 191D-pad, 192obracanie sze�cianu, 192onDrawFrame, 190onSurfaceChanged, 190requestFocus(), 194setFocusableInTouchMode(true), 194wy�wietlanie sze�cianu, 190
OpenMoko, 521OpenStreetMap, 473, 509optymalizowanie kodu, 593OSM, Patrz OpenStreetMapOTF, 186
PPaint.NET, 218
Canvas Dialog, 218Colors, 218
pakiet ADK, 21android, 21
create project, 21pakiet JDK, 29pakiet SDK, 29
aktualizacja, 46mo�liwe b��dy, 49
instalacja, 31przyk�adowe programy, 44SDK Manager, 32, 47
okno komunikatów, 48wtyczka ADT, 29
parser danych, 446parser ROME, 446PNG, 209pojemno�� karty SD, 390
610 � Skorowidz
polecenia pow�oki, 545powiadomienia, 338ProGuard, 592protokó� HTTP, 441protokó� SPP, 531przycisk graficzny, 249
RRESTful, 441rozg�aszanie uporz�dkowane, 420
Ssieci spo�eczno�ciowe, 467
Facebook, 467LinkedInem, 468protokó� HTTP, 467
obs�uga klikni�cia, 468pobieranie logo, 468tworzenie przycisków graficznych, 468
Twitter, 467, 470getTwitterTimeline(), 470wczytywanie chronologicznej listy tweetów,
470sieci, 441
3G, 441EDGE, 441GPRS, 441protokó� HTTP, 441protokó� HTTPS, 441protokó� SPP, 531RESTful, 441, 442spo�eczno�ciowe, 467
Facebook, 467LinkedInem, 468protokó� HTTP, 467Twitter, 467, 470
standard HDP, 531XML/SOAP, 441
singleton, 79, 240standard HDP, 531standardowe rozg�aszanie, 420sterowanie, 539
kopiowanie tekstu, 543getText(), 543setText(), 543
mened�er aktywno�ci, 547polecenia pow�oki, 545
exec(), 545process.waitFor(), 545Runtime, 545uruchamianie, 546
po��czenie z sieci�, 539informacje o sieci, 540
tryb dzwonka, 541ustawianie, 541, 542
ustawienia projektu, 540w��czanie wibracji, 544wy�wietlanie powiadomie�, 544
ledARGB(), 544notify(), 544
stoper z odliczaniem wstecznym, 55CountDownTimer, 55onFinish(), 55onTick(), 55
StrictMode, 139stronicowanie, 344SVG, 210
�rodowisko Eclipse, 24
parametry nowego projektu, 25projekt testowy, 124TextView, 26tworzenie nowego projektu, 45tworzenie projektu powi�zanego, 39
�rodowisko IDE Eclipse, 29
Ttesty, 111
awarie, 125adb logcat, 125findViewById(), 127NPE, 126
BugSense, 129BugSenseHandler, 130setContentView(), 130
chmura, 121cykl �ycia, 134
onDestroy(), 138onPause(), 138onRestart(), 138onStop(), 138rejestrowanie zdarze�, 135scenariusze, 138uruchamianie aktywno�ci, 135, 136wstrzymywanie aktywno�ci, 135, 137
debugowanie kodu, 128dane wyj�ciowe, 128Log.d(), 128
lokalny dziennik czasu wykonaniaRuntimeLog, 131
lokalny dziennik czasu wykonania, 131
Skorowidz � 611
Monkey, 140stosowanie, 141
projekt testowy, 122ActivityInstrumentationTestCase2, 124konfiguracja, 122tworzenie, 122w �rodowisku Eclipse, 124w �rodowisku IntelliJ IDEA, 123
sterowanie programowaniem, 111StrictMode, 139urz�dzenia AVD, 113
definiowanie, 115konfigurowanie, 114tworzenie nowego urz�dzenia, 115uruchamianie nowego urz�dzenia, 117w�a�ciwo�ci urz�dze�, 118
Tipster, 57AlertDialog, 71android.app.Activity, 64calculate(), 68EditText, 63findViewById(), 64getCheckedRadioButtonId(), 71OnCheckedChangeListener(), 66OnKeyListener(), 67requestFocus(), 65reset(), 69setEnabled(), 65showErrorAlert(), 69, 71TableLayout, 60,TableRaw, 60View, 64
TTF, 186Twittera, 467tworzenie
bazy SQLite, 401ekranów powitalnych, 84ikony, 208, 215kopii zapasowej, 102menu, 316nowego urz�dzenia AVD, 115odbiornika rozg�oszeniowego, 157projektu testowego, 122przycisku, 241, 468serwera, 536warstw mapy, 495, 511wykresów, 224
Uurz�dzenia AVD, 23, 113
definiowanie, 115konfigurowanie, 112, 114, 480
opcje uruchomieniowe, 116, 119testy, 113tworzenie nowego urz�dzenia, 115uruchamianie nowego urz�dzenia, 117w�a�ciwo�ci urz�dze�, 118
urz�dzenia GPS, 473
Wwiadomo�ci SMS, 426
odbieranie, 428get(), 428intencja rozg�oszeniowa, 428onReceive(), 428
SmsManager, 426wysy�anie, 425, 429
kod, 426okno Emulator Control, 430sendMultipartTextMessage(), 426sendTextMessage(), 426
wid�et, 236wid�et aplikacji, 236, 284, 311wtyczka ADT, 24, 29
instalacja, 33wyra�enia regularne, 444
wy�wietlanieczasu i daty, 97danych, 207ikony, 499listy wierszy, 344menu, 316powiadomie�, 338, 544pól tekstowych, 254reklam, 588stron internetowych, 452warstwy, 495zawarto�ci katalogu, 387
XXML/SOAP, 441
YYouTube, 367
Zzaciemnianie kodu, 593
612 � Skorowidz