Darmowy fragment publikacji:
Tytuł oryginału: Android Programming: Pushing the Limits
Tłumaczenie: Łukasz Piwko
ISBN: 978-83-246-9525-6
© 2014 Erik Hellman
All Rights Reserved. Authorised translation from the English language edition published by John Wiley
Sons Limited. Responsibility for the accuracy of the translation rests solely with Helion S.A. and is not the
responsibility of John Wiley Sons Limited.
No part of this book may be reproduced in any form without the written permission of the original
copyright holder, John Wiley Sons Limited.
Translation copyright © 2014 by Helion S.A.
Wiley and the Wiley logo are trademarks or registered trademarks of John Wiley and Sons, Inc. and/or its
affiliates in the United States and/or other countries, and may not be used without written permission.
Android is a trademark of Google, Inc. All other trademarks are the property of their respective owners.
John Wiley Sons, Ltd. is not associated with any product or vendor mentioned in the book.
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.
Autor oraz Wydawnictwo HELION dołożyli 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)
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/plandr.zip
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/plandr
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
• Kup książkę
• Poleć książkę
• Oceń książkę
• Księgarnia internetowa
• Lubię to! » Nasza społeczność
Spis tre(cid:258)ci
O autorze ........................................................................................................ 13
Wprowadzenie ................................................................................................. 15
Cz(cid:218)(cid:258)(cid:202) I: Solidne podstawy .................................................................21
Rozdzia(cid:239) 1. Konfigurowanie (cid:258)rodowiska programistycznego .................................. 23
Systemy operacyjne do programowania Androida ......................................................... 23
Zaawansowane narz(cid:218)dzia SDK Androida ..................................................................... 24
Narz(cid:218)dzie adb ...................................................................................................... 24
Testowanie przeci(cid:200)(cid:285)eniowe interfejsu u(cid:285)ytkownika przy u(cid:285)yciu Monkey ....................... 27
System kompilacji Gradle ...................................................................................... 28
Optymalizacja i zaciemnianie za pomoc(cid:200) ProGuard ................................................... 30
Projekty bibliotek Android i biblioteki zewn(cid:218)trzne ......................................................... 31
Skompilowane pliki JAR ........................................................................................ 31
Tworzenie projektu biblioteki ................................................................................. 32
Kontrola wersji i zarz(cid:200)dzanie kodem (cid:283)ród(cid:239)owym ........................................................... 33
(cid:165)rodowisko programistyczne ...................................................................................... 35
Diagnozowanie aplikacji Android ............................................................................ 35
Statyczna analiza kodu przy u(cid:285)yciu lint ................................................................... 37
Refaktoryzacja kodu ............................................................................................. 39
Opcje programistyczne w urz(cid:200)dzeniach z Androidem .................................................... 41
Ustawienia programistyczne .................................................................................. 42
Podsumowanie ......................................................................................................... 44
Dodatkowe (cid:283)ród(cid:239)a informacji ...................................................................................... 44
Ksi(cid:200)(cid:285)ki ................................................................................................................ 44
Strony internetowe ............................................................................................... 44
Rozdzia(cid:239) 2. Efektywne programowanie w Javie na Androidzie ............................... 45
Porównanie Javy Dalvik z Jav(cid:200) SE .............................................................................. 45
Optymalizacja kodu Java dla Androida ........................................................................ 47
Bezpieczne pod wzgl(cid:218)dem typów wyliczenia w Androidzie ......................................... 48
Udoskonalona p(cid:218)tla for w Androidzie ...................................................................... 49
Kolejki, synchronizacja i blokady ............................................................................ 50
Zarz(cid:200)dzanie pami(cid:218)ci(cid:200) i alokacj(cid:200) ................................................................................. 52
Ograniczanie liczby alokacji obiektów ...................................................................... 52
Kup książkęPoleć książkę6
Spis tre(cid:286)ci
Wielow(cid:200)tkowo(cid:258)(cid:202) w Androidzie .................................................................................... 55
Klasa Thread ....................................................................................................... 56
Klasa AsyncTask .................................................................................................. 57
Klasa Handler ...................................................................................................... 58
Wykonywanie operacji w regularnych odst(cid:218)pach czasu .............................................. 60
U(cid:285)ywanie klasy MainLooper w po(cid:239)(cid:200)czeniu z Handler ................................................. 61
Jak wybra(cid:202) najlepsze rozwi(cid:200)zanie ............................................................................... 62
Podsumowanie ......................................................................................................... 63
Dodatkowe (cid:283)ród(cid:239)a informacji ...................................................................................... 63
Dokumentacja ..................................................................................................... 63
Ksi(cid:200)(cid:285)ki ................................................................................................................ 63
Strony internetowe ............................................................................................... 63
Cz(cid:218)(cid:258)(cid:202) II: Efektywne wykorzystanie sk(cid:239)adników ....................................65
Rozdzia(cid:239) 3. Sk(cid:239)adniki, manifesty i zasoby ........................................................... 67
Sk(cid:239)adniki Androida .................................................................................................... 67
Sk(cid:239)adnik Activity .................................................................................................. 68
Sk(cid:239)adnik Service ................................................................................................... 68
Sk(cid:239)adnik BroadcastReceiver ................................................................................... 68
Sk(cid:239)adnik ContentProvider ...................................................................................... 69
Sk(cid:239)adnik Application ............................................................................................. 69
Architektura aplikacji ............................................................................................ 71
Manifest aplikacji Android .......................................................................................... 72
Element manifest ................................................................................................. 72
Filtry i uprawnienia Google Play ............................................................................. 73
Element application .............................................................................................. 75
Elementy i atrybuty sk(cid:239)adników .............................................................................. 76
Filtrowanie intencji ............................................................................................... 77
Zasoby i (cid:258)rodki .......................................................................................................... 78
Zaawansowane zasoby (cid:239)a(cid:241)cuchowe ........................................................................ 79
Lokalizacja .......................................................................................................... 80
Kwalifikatory zasobów .......................................................................................... 80
(cid:165)rodki ................................................................................................................. 82
Podsumowanie ......................................................................................................... 83
Dodatkowe (cid:283)ród(cid:239)a informacji ...................................................................................... 83
Dokumentacja ..................................................................................................... 83
Rozdzia(cid:239) 4. Interakcja z u(cid:285)ytkownikiem i projektowanie interfejsów ...................... 85
Historyjki u(cid:285)ytkowników ............................................................................................ 85
U(cid:285)ytkownicy i postaci ........................................................................................... 86
Projektowanie interfejsu u(cid:285)ytkownika Androida ............................................................ 87
Nawigacja ........................................................................................................... 87
Prototypowanie interfejsu u(cid:285)ytkownika .................................................................... 88
Projektowanie interfejsu u(cid:285)ytkownika w Android Studio ............................................. 88
Elementy interfejsu u(cid:285)ytkownika Androida ................................................................... 89
Tekst w aplikacjach na Androida ................................................................................ 89
Krój pisma .......................................................................................................... 89
Uk(cid:239)ad tekstu ........................................................................................................ 90
Kup książkęPoleć książkę
Spis tre(cid:286)ci
7
Wymiary i rozmiary ................................................................................................... 90
Zalecane wymiary ................................................................................................ 91
Rozmiary ikon ...................................................................................................... 91
Rozmiar tekstu .................................................................................................... 92
Kolory ................................................................................................................. 92
Daltonizm ........................................................................................................... 93
Obrazy i ikony ........................................................................................................... 93
Perspektywa kanoniczna ....................................................................................... 94
Geony ................................................................................................................. 94
Rozpoznawanie twarzy .......................................................................................... 95
Walory u(cid:285)ytkowe ....................................................................................................... 95
Wskazówki wizualne ............................................................................................. 95
Nagradzanie u(cid:285)ytkownika .......................................................................................... 96
Grywalizacja ........................................................................................................ 96
Podsumowanie ......................................................................................................... 97
Dodatkowe (cid:283)ród(cid:239)a informacji ...................................................................................... 98
Ksi(cid:200)(cid:285)ki ................................................................................................................ 98
Strony internetowe ............................................................................................... 98
Rozdzia(cid:239) 5. Interfejs u(cid:285)ytkownika dla zaawansowanych ....................................... 99
Aktywno(cid:258)ci i fragmenty .............................................................................................. 99
U(cid:285)ywanie wielu ekranów .......................................................................................... 100
Projektowanie w(cid:239)asnych widoków ............................................................................. 102
Cykl (cid:285)ycia widoku ............................................................................................... 103
Wid(cid:285)et o wygl(cid:200)dzie klawiatury fortepianowej .......................................................... 103
Wielodotyk ............................................................................................................. 108
Wspó(cid:239)rz(cid:218)dne wska(cid:283)nika ...................................................................................... 110
Gest obrotu ....................................................................................................... 111
OpenGL ES ............................................................................................................. 112
Grafy sceny i silniki gier ...................................................................................... 113
Podsumowanie ....................................................................................................... 113
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 114
Ksi(cid:200)(cid:285)ki .............................................................................................................. 114
Strony internetowe ............................................................................................. 114
Rozdzia(cid:239) 6. Us(cid:239)ugi i zadania w tle .................................................................... 115
Jak i kiedy u(cid:285)ywa(cid:202) us(cid:239)ug .......................................................................................... 115
Typy us(cid:239)ug ........................................................................................................ 116
Cykl (cid:285)ycia us(cid:239)ug ...................................................................................................... 116
Tworzenie i niszczenie us(cid:239)ug ................................................................................ 116
Uruchamianie us(cid:239)ug ........................................................................................... 117
Wi(cid:200)zanie us(cid:239)ug .................................................................................................. 118
Utrzymywanie si(cid:218) przy (cid:285)yciu ................................................................................ 120
Zatrzymywanie us(cid:239)ug .......................................................................................... 121
Dzia(cid:239)anie w tle ........................................................................................................ 123
Klasa IntentService ............................................................................................. 123
Równoleg(cid:239)e wykonywanie .................................................................................... 124
Komunikacja z us(cid:239)ugami .......................................................................................... 126
Asynchroniczne wysy(cid:239)anie powiadomie(cid:241) przy u(cid:285)yciu intencji .................................... 126
Lokalne wi(cid:200)zanie us(cid:239)ug ....................................................................................... 127
Kup książkęPoleć książkę8
Spis tre(cid:286)ci
Podsumowanie ....................................................................................................... 130
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 131
Blogi ................................................................................................................ 131
Rozdzia(cid:239) 7. Komunikacja mi(cid:218)dzyprocesowa ...................................................... 133
Binder .................................................................................................................... 134
Adres Bindera .................................................................................................... 134
Transakcje Bindera ............................................................................................. 135
Klasa Parcel ...................................................................................................... 136
(cid:146)(cid:200)cze ze (cid:258)mierci(cid:200) ............................................................................................... 138
Projektowanie API ................................................................................................... 138
AIDL ................................................................................................................. 139
Wywo(cid:239)ania zwrotne przy u(cid:285)yciu AIDL .................................................................... 142
Klasa Messenger ................................................................................................ 143
Opakowywanie API w biblioteki ........................................................................... 146
Zabezpieczanie zdalnych API ............................................................................... 148
Podsumowanie ....................................................................................................... 149
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 149
Strony internetowe ............................................................................................. 149
Rozdzia(cid:239) 8. Odbieranie komunikatów i zmiany konfiguracji ................................. 151
Klasa BroadcastReceiver .......................................................................................... 152
Lokalne odbiorniki powiadomie(cid:241) .......................................................................... 153
Powiadomienia normalne i uporz(cid:200)dkowane ........................................................... 154
Powiadomienia kleiste ........................................................................................ 155
Powiadomienia bezpo(cid:258)rednie ............................................................................... 156
W(cid:239)(cid:200)czanie i wy(cid:239)(cid:200)czanie odbiorników ..................................................................... 156
Intencje rozsy(cid:239)ane przez system ........................................................................... 157
Zmienianie konfiguracji urz(cid:200)dzenia ........................................................................... 160
Podsumowanie ....................................................................................................... 161
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 161
Dokumentacja ................................................................................................... 161
Rozdzia(cid:239) 9. Przechowywanie i serializacja danych ............................................. 163
Techniki utrwalania danych w Androidzie .................................................................. 163
Przechowywanie danych w plikach preferencji ........................................................... 164
Opcje u(cid:285)ytkownika i ustawienia interfejsu u(cid:285)ytkownika ............................................... 166
Dostawcy tre(cid:258)ci o wysokiej wydajno(cid:258)ci ...................................................................... 168
Projektowanie bazy danych w Androidzie .............................................................. 168
Tworzenie i aktualizowanie baz danych ................................................................. 169
Implementacja metod zapytaniowych ................................................................... 171
Transakcje bazy danych ...................................................................................... 172
Zapisywanie danych binarnych w ContentProvider .................................................. 174
Serializacja danych do utrwalania ............................................................................. 175
JSON ................................................................................................................ 175
Zaawansowana obs(cid:239)uga JSON przy u(cid:285)yciu Gson ..................................................... 177
Protocol Buffers Google ....................................................................................... 179
Robienie kopii zapasowej danych aplikacji ................................................................. 181
Podsumowanie ....................................................................................................... 183
Kup książkęPoleć książkę
Spis tre(cid:286)ci
9
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 183
Dokumentacja ................................................................................................... 183
Strony internetowe ............................................................................................. 183
Rozdzia(cid:239) 10. Pisanie automatycznych testów .................................................... 185
Zasady testowania w Androidzie ............................................................................... 185
Co testowa(cid:202) ...................................................................................................... 186
Podstawowe testy jednostkowe ............................................................................ 187
Testowanie aktywno(cid:258)ci ....................................................................................... 188
Testowanie us(cid:239)ug ............................................................................................... 190
Testowanie dostawców tre(cid:258)ci ............................................................................... 191
Wykonywanie testów .......................................................................................... 193
Ci(cid:200)g(cid:239)a integracja ..................................................................................................... 194
Podsumowanie ....................................................................................................... 195
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 195
Porady dotycz(cid:200)ce testowania ............................................................................... 195
Ksi(cid:200)(cid:285)ki .............................................................................................................. 195
Strony internetowe ............................................................................................. 195
Cz(cid:218)(cid:258)(cid:202) III: Przekraczanie barier ........................................................197
Rozdzia(cid:239) 11. Zaawansowane aplikacje obs(cid:239)uguj(cid:200)ce audio, wideo oraz kamer(cid:218) ...... 199
Zaawansowane aplikacje d(cid:283)wi(cid:218)kowe ......................................................................... 199
Odtwarzanie d(cid:283)wi(cid:218)ków z krótkim opó(cid:283)nieniem ....................................................... 200
OpenSL ES dla Androida ..................................................................................... 202
Czytanie tekstu na g(cid:239)os ....................................................................................... 205
Rozpoznawanie mowy ........................................................................................ 207
Przetwarzanie filmów przy u(cid:285)yciu OpenGL ES 2.0 ...................................................... 209
Przetwarzanie obrazu z kamery przy u(cid:285)yciu OpenGL ES 2.0 ........................................ 212
Kodowanie mediów ................................................................................................. 213
Nagrywanie sceny OpenGL .................................................................................. 214
Podsumowanie ....................................................................................................... 218
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 218
Dokumentacja ................................................................................................... 218
Rozdzia(cid:239) 12. Bezpiecze(cid:241)stwo aplikacji na Androidzie ......................................... 219
Poj(cid:218)cia dotycz(cid:200)ce bezpiecze(cid:241)stwa ............................................................................ 219
Klucze i podpisy ................................................................................................. 219
Uprawnienia w Androidzie ................................................................................... 220
Ochrona danych u(cid:285)ytkownika .............................................................................. 221
Weryfikowanie wywo(cid:239)uj(cid:200)cych aplikacji .................................................................. 222
Szyfrowanie danych u klienta ................................................................................... 223
API crypto ......................................................................................................... 223
Generowanie klucza ............................................................................................ 223
Szyfrowanie danych ............................................................................................ 223
Deszyfrowanie danych ........................................................................................ 224
Praca z zaszyfrowanymi danymi ........................................................................... 225
Zarz(cid:200)dzanie p(cid:218)kami kluczy ....................................................................................... 226
API zarz(cid:200)dzania urz(cid:200)dzeniem ................................................................................... 229
Podsumowanie ....................................................................................................... 232
Kup książkęPoleć książkę10 Spis tre(cid:286)ci
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 232
Ksi(cid:200)(cid:285)ki .............................................................................................................. 232
Dokumentacja ................................................................................................... 232
Strony internetowe ............................................................................................. 232
Rozdzia(cid:239) 13. Mapy, lokalizacja i API aktywno(cid:258)ci ............................................... 233
Scalony mened(cid:285)er lokalizacji .................................................................................... 233
Integracja API map Google ....................................................................................... 234
Korzystanie z map Google ........................................................................................ 236
Znaczniki na mapach .......................................................................................... 237
Rysowanie kó(cid:239)ek ................................................................................................ 238
Rysowanie wielok(cid:200)tów ........................................................................................ 239
Przydatne narz(cid:218)dzia API lokalizacyjnego ................................................................ 240
Geokodowanie ................................................................................................... 240
Klasa LocationClient ................................................................................................ 241
Geofencing ............................................................................................................. 242
Rozpoznawanie aktywno(cid:258)ci ...................................................................................... 244
Podsumowanie ....................................................................................................... 246
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 246
Dokumentacja ................................................................................................... 246
Strony internetowe ............................................................................................. 246
Rozdzia(cid:239) 14. Kod macierzysty i JNI .................................................................. 247
Kilka uwag o architekturze CPU ............................................................................... 247
Pisanie aplikacji na Androida w j(cid:218)zyku C ................................................................... 248
Skrypty kompilacji NDK ...................................................................................... 248
Macierzyste aktywno(cid:258)ci ....................................................................................... 249
Macierzysty interfejs Javy ........................................................................................ 250
Wywo(cid:239)ywanie funkcji macierzystych w Javie .......................................................... 250
Wywo(cid:239)ywanie metod Javy z kodu macierzystego ..................................................... 252
Macierzyste API Androida ........................................................................................ 255
Biblioteka C ....................................................................................................... 256
Macierzyste funkcje obs(cid:239)ugi dziennika ................................................................... 256
OpenGL ES 2.0 w kodzie macierzystym ................................................................ 256
OpenSL ES w kodzie macierzystym ....................................................................... 256
Przenoszenie macierzystej biblioteki do Androida ....................................................... 257
Kompilowanie macierzystej biblioteki .................................................................... 257
Podsumowanie ....................................................................................................... 262
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 263
Portal dla programistów Androida ......................................................................... 263
Strony internetowe firmy Oracle ........................................................................... 263
Rozdzia(cid:239) 15. Ukryte API Androida ................................................................... 265
API ukryte i oficjalne ............................................................................................... 265
Wyszukiwanie ukrytych API ..................................................................................... 266
Bezpieczne wywo(cid:239)ywanie ukrytych API ..................................................................... 267
Wydobywanie ukrytych API z urz(cid:200)dzenia ............................................................... 268
Wywo(cid:239)ywanie ukrytych API przy u(cid:285)yciu refleksji ..................................................... 270
Kup książkęPoleć książkę
Spis tre(cid:286)ci 11
Przyk(cid:239)ady ukrytych API ............................................................................................ 271
Odbieranie i czytanie SMS-ów .............................................................................. 271
Tethering Wi-Fi .................................................................................................. 272
Ukryte ustawienia .............................................................................................. 273
Podsumowanie ....................................................................................................... 274
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 274
Strony internetowe ............................................................................................. 274
Rozdzia(cid:239) 16. Hakowanie platformy Android ...................................................... 275
Odblokowywanie urz(cid:200)dzenia .................................................................................... 276
Wgrywanie obrazów fabrycznych .......................................................................... 277
Odblokowywanie urz(cid:200)dze(cid:241) innych ni(cid:285) Google Nexus ............................................... 277
Oprogramowanie uk(cid:239)adowe od grup programistów .................................................. 278
Kod (cid:283)ród(cid:239)owy Androida ............................................................................................ 278
Konfiguracja (cid:258)rodowiska kompilacji ...................................................................... 278
Kompilowanie i wgrywanie oprogramowania uk(cid:239)adowego ........................................ 279
Pisanie aplikacji systemowych .................................................................................. 280
Certyfikaty platformy ........................................................................................... 281
Podpisywanie aplikacji ........................................................................................ 282
Hakowanie platformy Android ................................................................................... 283
Konfiguracje (cid:258)rodowiska programistycznego ........................................................... 283
Projekty Android ................................................................................................ 284
J(cid:200)dro Linuksa w Androidzie ................................................................................. 285
Dodawanie us(cid:239)ugi systemowej ............................................................................. 285
Przyspieszanie prac nad platform(cid:200) ........................................................................ 288
W(cid:239)asny wk(cid:239)ad w rozwój AOSP .................................................................................. 289
Podsumowanie ....................................................................................................... 289
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 291
Strony internetowe ............................................................................................. 291
Rozdzia(cid:239) 17. Praca w sieci, us(cid:239)ugi sieciowe oraz zdalne API ............................... 293
Korzystanie z sieci w Androidzie ............................................................................... 293
Klasa HttpUrlConnection ..................................................................................... 294
Volley ............................................................................................................... 297
OkHttp i SPDY ................................................................................................... 299
Gniazda sieciowe ............................................................................................... 300
Integracja us(cid:239)ug sieciowych ...................................................................................... 303
Static Maps v2 Google ........................................................................................ 303
U(cid:285)ywanie OAuth2 w API Foursquare .................................................................... 305
SDK Facebooka dla Androida ............................................................................... 308
Znajdowanie us(cid:239)ug sieciowych i API ..................................................................... 312
Korzystanie z sieci a zu(cid:285)ycie energii .......................................................................... 312
Ogólne wskazówki .............................................................................................. 313
Energooszcz(cid:218)dne odpytywanie sieci ...................................................................... 314
Powiadamianie przez serwer ................................................................................ 314
Podsumowanie ....................................................................................................... 317
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 317
Dokumentacja ................................................................................................... 317
Strony internetowe ............................................................................................. 317
Kup książkęPoleć książkę12 Spis tre(cid:286)ci
Rozdzia(cid:239) 18. Komunikacja ze zdalnymi urz(cid:200)dzeniami ........................................ 319
Technologie (cid:239)(cid:200)czno(cid:258)ci Androida ................................................................................ 319
USB w Androidzie ................................................................................................... 320
Bluetooth LE .......................................................................................................... 322
Wi-Fi w Androidzie .................................................................................................. 325
Wykrywanie us(cid:239)ug sieciowych .............................................................................. 325
Wi-Fi Direct ....................................................................................................... 326
Us(cid:239)ugi sieciowe na urz(cid:200)dzeniach ............................................................................... 329
Tworzenie us(cid:239)ug typu RESTful przy u(cid:285)yciu Restlet .................................................. 329
Serwer WebSocket ............................................................................................. 332
Podsumowanie ....................................................................................................... 334
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 335
Strony internetowe ............................................................................................. 335
Rozdzia(cid:239) 19. Us(cid:239)ugi Google Play ...................................................................... 337
Uwierzytelnianie ..................................................................................................... 337
Dane aplikacji z dysku Google .................................................................................. 340
Zako(cid:241)czenia Google Cloud ....................................................................................... 343
Google Cloud Messaging .......................................................................................... 345
Klient GCM ....................................................................................................... 346
Us(cid:239)ugi Google Play dla gier ....................................................................................... 349
Przesy(cid:239)anie danych w powiadomieniach ................................................................ 351
Strategia przesy(cid:239)ania wiadomo(cid:258)ci ......................................................................... 352
Podsumowanie ....................................................................................................... 353
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 354
Strony internetowe ............................................................................................. 354
Rozdzia(cid:239) 20. Dystrybucja aplikacji w sklepie Google Play ................................... 355
Pobieranie op(cid:239)at wewn(cid:200)trz aplikacji .......................................................................... 356
Konsumowanie produktów .................................................................................. 358
Subskrypcje wewn(cid:200)trz aplikacji ............................................................................ 358
Reklamy w aplikacjach na Androida .......................................................................... 359
Kierowanie reklam .............................................................................................. 360
Kolory reklam .................................................................................................... 361
Reklamy pe(cid:239)noekranowe ..................................................................................... 361
Licencjonowanie aplikacji ........................................................................................ 362
Pliki rozszerze(cid:241) APK ............................................................................................... 363
Tworzenie plików rozszerze(cid:241) ................................................................................ 363
Pobieranie plików rozszerze(cid:241) ............................................................................... 363
Podsumowanie ....................................................................................................... 365
Dodatkowe (cid:283)ród(cid:239)a informacji .................................................................................... 365
Strony internetowe ............................................................................................. 365
Skorowidz ..................................................................................................... 367
Kup książkęPoleć książkęRozdzia(cid:225) 11. Zaawansowane aplikacje obs(cid:225)uguj(cid:261)ce audio, wideo oraz kamer(cid:266) 199
Rozdzia(cid:239) 11.
Zaawansowane aplikacje
obs(cid:239)uguj(cid:200)ce audio,
wideo oraz kamer(cid:218)
Podczas gdy do pracy z d(cid:283)wi(cid:218)kiem, filmami i kamer(cid:200) wystarcz(cid:200) podstawowe API, w zaawansowanych
aplikacjach cz(cid:218)sto potrzebne s(cid:200) dodatkowe funkcje. Do zwyk(cid:239)ego nagrywania i odtwarzania mediów wy-
starcz(cid:200) dost(cid:218)pne w Androidzie API Javy. Niestety, opó(cid:283)nienia powodowane przez te wysokopoziomowe
API mog(cid:200) by(cid:202) czasami nie do przyj(cid:218)cia. Poza tym mo(cid:285)na mie(cid:202) trudno(cid:258)ci w czasie pracy z aplikacjami
wykorzystuj(cid:200)cymi kamer(cid:218), takimi jak aplikacje rozszerzonej rzeczywisto(cid:258)ci i inne, w których potrzebne
jest reagowanie programu na bie(cid:285)(cid:200)co.
W tym rozdziale dowiesz, si(cid:218) jak maksymalnie wykorzysta(cid:202) ró(cid:285)ne w(cid:239)a(cid:258)ciwo(cid:258)ci mediów w Androidzie.
W systemie tym mo(cid:285)na u(cid:285)ywa(cid:202) zarówno wysokowydajnych, jak i niskopoziomowych API, takich jak
OpenGL ES do grafiki czy OpenSL ES do d(cid:283)wi(cid:218)ku. Nauczysz si(cid:218) u(cid:285)ywa(cid:202) tych API w kombinacji i poznasz
kilka przypadków u(cid:285)ycia zaawansowanych funkcji d(cid:283)wi(cid:218)kowych, wideo i kamery.
Niektóre przedstawione w tym rozdziale przyk(cid:227)ady (m.in. ten odnosz(cid:270)cy si(cid:275) do OpenSL ES) zawie-
raj(cid:270) kod w j(cid:275)zyku C. Je(cid:295)li nie wiesz, jak si(cid:275) u(cid:307)ywa NDK Androida do budowy aplikacji przy u(cid:307)yciu
rodzimego kodu C, mo(cid:307)esz przed tym rozdzia(cid:227)em przeczyta(cid:260) rozdzia(cid:227) 14.
Zaawansowane aplikacje d(cid:283)wi(cid:218)kowe
Pierwszymi aplikacjami d(cid:283)wi(cid:218)kowymi w Androidzie by(cid:239)y odtwarzacze muzyki. Mo(cid:285)na by(cid:239)o w(cid:239)(cid:200)czy(cid:202) stru-
mieniowe odtwarzanie piosenek z internetu albo odtworzy(cid:202) utwory posiadane w pami(cid:218)ci urz(cid:200)dzenia. Jed-
nak w miar(cid:218) jak platforma Android si(cid:218) rozwija(cid:239)a, zacz(cid:218)(cid:239)y by(cid:202) potrzebne bardziej zaawansowane API do
obs(cid:239)ugi d(cid:283)wi(cid:218)ku. Dlatego firma Google postanowi(cid:239)a doda(cid:202) API umo(cid:285)liwiaj(cid:200)ce strumieniowanie i nagry-
wanie d(cid:283)wi(cid:218)ku z ma(cid:239)ym opó(cid:283)nieniem.
Obecnie dost(cid:218)pne w Androidzie API d(cid:283)wi(cid:218)kowe obs(cid:239)uguj(cid:200) zaawansowane funkcje, których mo(cid:285)na u(cid:285)y-
wa(cid:202) w aplikacjach. Teraz ju(cid:285) nie jest trudne zaimplementowanie aplikacji VoIP (ang. voice over internet
protocol), zbudowanie w(cid:239)asnego strumieniowego klienta muzycznego czy zaimplementowanie nieopó(cid:283)-
nionych odg(cid:239)osów w grach. Ponadto dost(cid:218)pne s(cid:200) API umo(cid:285)liwiaj(cid:200)ce korzystanie z funkcji czytania tek-
stu na g(cid:239)os i rozpoznawania mowy, dzi(cid:218)ki którym u(cid:285)ytkownicy mog(cid:200) obs(cid:239)ugiwa(cid:202) aplikacje za pomoc(cid:200)
d(cid:283)wi(cid:218)ków zamiast wizualnego interfejsu u(cid:285)ytkownika lub technologii dotykowych.
Kup książkęPoleć książkę200 Cz(cid:266)(cid:286)(cid:252) III: Przekraczanie barier
W tym podrozdziale obja(cid:258)ni(cid:218), jak u(cid:285)ywa(cid:202) tych funkcji, oraz przedstawi(cid:218) przyk(cid:239)ady kodu, dzi(cid:218)ki którym
(cid:239)atwiej Ci b(cid:218)dzie rozpocz(cid:200)(cid:202) prac(cid:218) z nimi.
Odtwarzanie d(cid:283)wi(cid:218)ków z krótkim opó(cid:283)nieniem
System Android zawiera cztery API do odtwarzania d(cid:283)wi(cid:218)ków (a nawet pi(cid:218)(cid:202), je(cid:258)li doliczy si(cid:218) MIDI) i trzy
do ich nagrywania. W kolejnych kilku sekcjach znajduje si(cid:218) przegl(cid:200)d tych API wraz z przyk(cid:239)adami kodu
ilustruj(cid:200)cymi sposób u(cid:285)ycia bardziej zaawansowanych funkcji.
API do odtwarzania d(cid:283)wi(cid:218)ku
Domy(cid:258)ln(cid:200) klas(cid:200) do obs(cid:239)ugi odtwarzania d(cid:283)wi(cid:218)ku jest MediaPlayer. Klasa ta zawiera podstawowe funkcje
dotycz(cid:200)ce odtwarzania d(cid:283)wi(cid:218)ku odpowiednie do u(cid:285)ycia w odtwarzaczach muzyki (lub filmów) i udost(cid:218)p-
nia wygodne API do odtwarzania d(cid:283)wi(cid:218)ków zarówno ze (cid:283)róde(cid:239) strumieniowych (np. radia internetowe-
go), jak i z lokalnych plików. Z klas(cid:200) MediaPlayer zwi(cid:200)zana jest zaawansowana maszyna stanów, któr(cid:200)
musi (cid:258)ledzi(cid:202) aplikacja. Przy u(cid:285)yciu tego API mo(cid:285)na doda(cid:202) do aplikacji odtwarzacz muzyki lub filmów
i nie martwi(cid:202) si(cid:218) o dodatkowe przetwarzanie ani opó(cid:283)nienia.
Inn(cid:200) mo(cid:285)liwo(cid:258)ci(cid:200) w kwestii odtwarzania d(cid:283)wi(cid:218)ków jest klasa SoundPool, która charakteryzuje si(cid:218) odtwa-
rzaniem d(cid:283)wi(cid:218)ku z bardzo ma(cid:239)ym opó(cid:283)nieniem, a wi(cid:218)c jest odpowiednia do odtwarzania odg(cid:239)osów i in-
nych krótkich d(cid:283)wi(cid:218)ków. API tego u(cid:285)ywa si(cid:218) np. do w(cid:239)(cid:200)czania odg(cid:239)osów w grach. Brak w nim jednak
obs(cid:239)ugi strumieniowania d(cid:283)wi(cid:218)ku, wi(cid:218)c nie nadaje si(cid:218) do u(cid:285)ycia w aplikacjach odtwarzaj(cid:200)cych strumie-
nie d(cid:283)wi(cid:218)kowe, takich jak VoIP.
Trzeci(cid:200) mo(cid:285)liwo(cid:258)(cid:202) odtwarzania d(cid:283)wi(cid:218)ku reprezentuje klasa AudioTrack, która umo(cid:285)liwia przekazanie do
sprz(cid:218)tu pojedynczego strumienia d(cid:283)wi(cid:218)kowego w postaci surowych buforów PCM. Rozwi(cid:200)zanie to za-
pewnia niskie opó(cid:283)nienia nawet przy strumieniowaniu. Klasa AudioTrack jest tak efektywna, (cid:285)e mo(cid:285)e
by(cid:202) z powodzeniem u(cid:285)ywana w VoIP i podobnych technologiach.
Poni(cid:285)ej znajduje si(cid:218) przyk(cid:239)ad u(cid:285)ycia klasy AudioTrack w typowej aplikacji VoIP:
public class AudioTrackDemo {
private final AudioTrack mAudioTrack;
private final int mMinBufferSize;
public AudioTrackDemo() {
mMinBufferSize = AudioTrack.getMinBufferSize(16000,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT);
mAudioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
16000,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mMinBufferSize * 2,
AudioTrack.MODE_STREAM);
}
public void playPcmPacket(byte[] pcmData) {
if(mAudioTrack != null
mAudioTrack.getState() == AudioTrack.STATE_INITIALIZED)
{
if(mAudioTrack.getPlaybackRate()
!= AudioTrack.PLAYSTATE_PLAYING) {
mAudioTrack.play();
Kup książkęPoleć książkęRozdzia(cid:225) 11. Zaawansowane aplikacje obs(cid:225)uguj(cid:261)ce audio, wideo oraz kamer(cid:266) 201
}
mAudioTrack.write(pcmData, 0, pcmData.length);
}
}
public void stopPlayback() {
if(mAudioTrack != null) {
mAudioTrack.stop();
mAudioTrack.release();
}
}
}
Najpierw okre(cid:258)li(cid:239)em minimalny rozmiar bufora dla strumienia audio. Aby to zrobi(cid:202), trzeba zna(cid:202) cz(cid:218)stotli-
wo(cid:258)(cid:202) próbkowania, wiedzie(cid:202), czy sygna(cid:239) jest mono-, czy stereofoniczny oraz czy b(cid:218)dzie u(cid:285)ywane 8-, czy
16-bitowe kodowanie PCM. Cz(cid:218)stotliwo(cid:258)(cid:202) próbkowania i rozmiar próbki s(cid:200) parametrami metody Audio-
Track.getMinBufferSize(), która zwraca minimalny rozmiar bufora w bajtach dla danego egzemplarza
klasy AudioTrack.
Egzemplarz klasy AudioTrack tworzy si(cid:218) przy u(cid:285)yciu parametrów dostosowanych do potrzeb programisty.
Pierwszy parametr dostosowuje si(cid:218) do typu u(cid:285)ywanego sygna(cid:239)u d(cid:283)wi(cid:218)kowego. W przypadku aplikacji
VoIP nale(cid:285)y u(cid:285)y(cid:202) STREAM_VOICE_CALL, a do strumieniowania muzyki — STREAM_MUSIC.
Drugi, trzeci i czwarty parametr zmieniaj(cid:200) si(cid:218) w zale(cid:285)no(cid:258)ci od sytuacji. S(cid:239)u(cid:285)(cid:200) one odpowiednio do okre-
(cid:258)lania cz(cid:218)stotliwo(cid:258)ci próbkowania, czy sygna(cid:239) jest stereo, czy mono, oraz rozmiaru próbkowania. W apli-
kacji VoIP mo(cid:285)na by by(cid:239)o zastosowa(cid:202) 16 kHz przy 16 bitach mono, natomiast w odtwarzaczu muzyki
lepsze by(cid:239)oby ustawienie 44,1 kHz przy 16 bitach stereo. Wy(cid:285)sza cz(cid:218)stotliwo(cid:258)(cid:202) próbkowania przy 16
bitach stereo wymaga zastosowania wi(cid:218)kszego bufora oraz sprawniejszego przesy(cid:239)ania danych, ale po-
zwala uzyska(cid:202) lepsz(cid:200) jako(cid:258)(cid:202). Wszystkie urz(cid:200)dzenia z Androidem obs(cid:239)uguj(cid:200) odtwarzanie sygna(cid:239)u PCM
o cz(cid:218)stotliwo(cid:258)ci próbkowania 8, 16 i 44,1 kHz, z rozmiarem próbki 8 i 16 bitów stereo.
Warto(cid:258)(cid:202) parametru okre(cid:258)laj(cid:200)cego rozmiar bufora AudioTrack powinna by(cid:202) wielokrotno(cid:258)ci(cid:200) minimalnego
rozmiaru bufora. Wybór konkretnej warto(cid:258)ci zale(cid:285)y od potrzeb, a tak(cid:285)e od opó(cid:283)nie(cid:241) sieciowych i innych
czynników.
Nigdy nie dopuszczaj, aby bufor by(cid:227) pusty, bo spowoduje to powstanie zak(cid:227)óce(cid:285) podczas odtwa-
rzania d(cid:305)wi(cid:275)ku.
Ostatni parametr konstruktora okre(cid:258)la, czy dane akustyczne maj(cid:200) zosta(cid:202) wys(cid:239)ane raz (MODE_STATIC), czy
jako ci(cid:200)g(cid:239)y strumie(cid:241) (MODE_STREAM). W pierwszym przypadku konieczne jest przes(cid:239)anie ca(cid:239)o(cid:258)ci. Natomiast
w przypadku strumieniowania mo(cid:285)na wysy(cid:239)a(cid:202) porcje danych PCM o dowolnym rozmiarze, co jest bardzo
przydatne w aplikacjach odtwarzaj(cid:200)cych strumienie muzyki i VoIP.
API do rejestrowania d(cid:283)wi(cid:218)ku
Pierwsze API do rejestrowania d(cid:283)wi(cid:218)ku (a tak(cid:285)e wideo) to MediaRecorder. Jest podobne do MediaPlayer,
bo równie(cid:285) utrzymuje wewn(cid:218)trzny stan, który nale(cid:285)y (cid:258)ledzi(cid:202) w kodzie. Za pomoc(cid:200) klasy MediaRecorder
mo(cid:285)na tylko zapisywa(cid:202) przechwycone dane w pliku, a wi(cid:218)c nie nadaje si(cid:218) ona do u(cid:285)ytku w aplikacjach
strumieniowych.
Je(cid:258)li rejestrowane d(cid:283)wi(cid:218)ki maj(cid:200) by(cid:202) przesy(cid:239)ane strumieniowo, mo(cid:285)na u(cid:285)y(cid:202) API AudioRecord, które jest
bardzo podobne do opisanego wy(cid:285)ej API AudioTrack.
Kup książkęPoleć książkę202 Cz(cid:266)(cid:286)(cid:252) III: Przekraczanie barier
Poni(cid:285)ej znajduje si(cid:218) przyk(cid:239)ad u(cid:285)ycia klasy AudioRecord do nagrywania 16-bitowego sygna(cid:239)u monofonicz-
nego o cz(cid:218)stotliwo(cid:258)ci próbkowania 16 kHz:
public class AudioRecordDemo {
private final AudioRecord mAudioRecord;
private final int mMinBufferSize;
private boolean mDoRecord = false;
public AudioRecordDemo() {
mMinBufferSize = AudioTrack.getMinBufferSize(16000, AudioFormat.CHANNEL_OUT_MONO,
(cid:180)AudioFormat.ENCODING_PCM_16BIT);
mAudioRecord = new AudioRecord(
MediaRecorder.AudioSource.VOICE_COMMUNICATION, 16000,
(cid:180)AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,
(cid:180)mMinBufferSize * 2);
}
public void writeAudioToStream(OutputStream stream) {
mDoRecord = true;
mAudioRecord.startRecording();
byte[] buffer = new byte[mMinBufferSize * 2];
while(mDoRecord) {
int bytesWritten = mAudioRecord.read(buffer, 0, buffer.length);
try {
stream.write(buffer, 0, bytesWritten);
} catch (IOException e) {
// pomini(cid:266)te dla uproszczenia...
mDoRecord = false;
}
}
mAudioRecord.stop();
mAudioRecord.release();
}
public void stopRecording() {
mDoRecord = false;
}
}
Jako (cid:285)e kod ten jest bardzo podobny do wcze(cid:258)niej pokazanego z u(cid:285)yciem klasy AudioTrack, mo(cid:285)na go
wykorzysta(cid:202) w celu u(cid:285)ycia kombinacji tych dwóch klas w aplikacjach VoIP itp.
OpenSL ES dla Androida
Wcze(cid:258)niej napisa(cid:239)em, (cid:285)e istniej(cid:200) cztery API do odtwarzania d(cid:283)wi(cid:218)ku i trzy do jego nagrywania. Do tej pory
opisa(cid:239)em trzy z pierwszej grupy i dwa z drugiej. Natomiast w tej sekcji znajduje si(cid:218) opis ostatniego z tych
API, o nazwie OpenSL ES, które s(cid:239)u(cid:285)y zarówno do odtwarzania, jak i rejestrowania d(cid:283)wi(cid:218)ku. OpenSL ES
to standard opracowywany przez Khronos Group (t(cid:218) sam(cid:200) grup(cid:218), która zajmuje si(cid:218) standardem OpenGL).
API OpenSL ES zawiera niskopoziomowe narz(cid:218)dzia do pracy bezpo(cid:258)rednio ze sprz(cid:218)tem, które zapewniaj(cid:200)
bardzo ma(cid:239)e opó(cid:283)nienia w odtwarzaniu i nagrywaniu d(cid:283)wi(cid:218)ku. Podczas gdy pozosta(cid:239)e opisywane API
maj(cid:200) wygodne interfejsy w Javie, OpenSL ES aktualnie dost(cid:218)pne jest wy(cid:239)(cid:200)cznie w j(cid:218)zyku C poprzez NDK
Androida. W tej sekcji opisuj(cid:218) tylko rodzim(cid:200) cz(cid:218)(cid:258)(cid:202) API OpenSL ES. Je(cid:258)li chcesz dowiedzie(cid:202) si(cid:218), jak przy
u(cid:285)yciu NDK Androida pisa(cid:202) kod JNI do wspó(cid:239)pracy z kodem w C, przeczytaj rozdzia(cid:239) 14.
Zak(cid:227)adam, (cid:307)e czytelnik zna podstawy programowania w j(cid:275)zyku C.
Kup książkęPoleć książkęRozdzia(cid:225) 11. Zaawansowane aplikacje obs(cid:225)uguj(cid:261)ce audio, wideo oraz kamer(cid:266) 203
Pierwsza cz(cid:218)(cid:258)(cid:202) przyk(cid:239)adu u(cid:285)ycia biblioteki OpenSL ES zawiera dyrektywy do(cid:239)(cid:200)czaj(cid:200)ce potrzebne pliki oraz
deklaracje globalnych obiektów, które b(cid:218)d(cid:200) u(cid:285)ywane w dalszej cz(cid:218)(cid:258)ci programu:
#include pthread.h
// potrzebne do obs(cid:225)ugi OpenSL ES
#include SLES/OpenSLES.h
#include SLES/OpenSLES_Android.h
static pthread_cond_t s_cond;
static pthread_mutex_t s_mutex;
static SLObjectItf engineObject = NULL;
static SLEngineItf engineEngine;
static SLObjectItf outputMixObject = NULL;
static SLObjectItf bqPlayerObject = NULL;
static SLPlayItf bqPlayerPlay;
static SLAndroidSimpleBufferQueueItf bqPlayerBufferQueue;
Poni(cid:285)ej znajduje si(cid:218) funkcja zwrotna bqPlayerCallback(), która jest wywo(cid:239)ywana przez OpenSL ES przy
odtwarzaniu próbki:
static void waitForPlayerCallback()
{
pthread_mutex_lock( s_mutex);
pthread_cond_wait( s_cond, s_mutex);
pthread_mutex_unlock( s_mutex);
}
SLresult enqueueNextSample(short* sample, int size, short waitForCallback)
{
if(waitForCallback)
{
waitForPlayerCallback();
}
return (*bqPlayerBufferQueue)- Enqueue(bqPlayerBufferQueue,
nextBuffer,
nextSize);
}
void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
{
pthread_cond_signal( s_cond);
}
W tym przypadku przekazujemy bufor wyj(cid:258)ciowy z innego w(cid:200)tku poprzez funkcj(cid:218) enqueueNextSample(). Do
synchronizacji w(cid:200)tku, w którym nast(cid:218)puje wywo(cid:239)anie zwrotne, z w(cid:200)tkiem wywo(cid:239)uj(cid:200)cym funkcj(cid:218) enqueue
u(cid:285)yli(cid:258)my pthread_mutex. Wywo(cid:239)anie funkcji waitForPlayerCallback() blokuje w(cid:200)tek do czasu wywo(cid:239)a-
nia funkcji pthread_cond_signal() w wywo(cid:239)aniu zwrotnym (podobnie dzia(cid:239)a blokowanie metod(cid:200) Object.
wait() w Javie).
W poni(cid:285)szym kodzie nast(cid:218)puje inicjacja silnika OpenSL ES:
SLresult initOpenSLES()
{
// S(cid:225)u(cid:298)y do sprawdzania wyniku ka(cid:298)dej operacji...
SLresult result;
int speakers;
Kup książkęPoleć książkę204 Cz(cid:266)(cid:286)(cid:252) III: Przekraczanie barier
int channels = 2;
// Najpierw tworzymy muteks, który b(cid:266)dzie potrzebny do odtwarzania pó(cid:296)niej.
pthread_cond_init( s_cond, NULL);
pthread_mutex_init( s_mutex, NULL);
// utworzenie i realizacja silnika
result = slCreateEngine( engineObject, 0, NULL, 0, NULL, NULL);
if(result != SL_RESULT_SUCCESS) return result;
result = (*engineObject)- Realize(engineObject, SL_BOOLEAN_FALSE);
if(result != SL_RESULT_SUCCESS) return result;
result = (*engineObject)- GetInterface(engineObject, SL_IID_ENGINE, engineEngine);
if(result != SL_RESULT_SUCCESS) return result;
// utworzenie i realizacja miksera wyj(cid:286)ciowego
const SLInterfaceID outputIds[1] = {SL_IID_VOLUME};
const SLboolean outputReq[1] = {SL_BOOLEAN_FALSE};
result = (*engineEngine)- CreateOutputMix(engineEngine, outputMixObject, 1, outputIds,
(cid:180)outputReq);
if(result != SL_RESULT_SUCCESS) return result;
result = (*outputMixObject)- Realize(outputMixObject, SL_BOOLEAN_FALSE);
if(result != SL_RESULT_SUCCESS) return result;
// utworzenie bufora wyj(cid:286)ciowego i uj(cid:286)cia
SLDataLocator_AndroidSimpleBufferQueue bufferQueue =
(cid:180){SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
speakers = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT;
SLDataFormat_PCM formatPcm = {SL_DATAFORMAT_PCM, channels, SL_SAMPLINGRATE_44_1,
(cid:180)SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16, speakers,
(cid:180)SL_BYTEORDER_LITTLEENDIAN};
SLDataSource audioSource = { bufferQueue, formatPcm};
SLDataLocator_OutputMix dataLocOutputMix = {SL_DATALOCATOR_OUTPUTMIX, outputMixObject};
SLDataSink audioSink = { dataLocOutputMix, NULL};
// utworzenie i realizacja obiektu odtwarzacza
const SLInterfaceID playerIds[] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE};
const SLboolean playerReq[] = {SL_BOOLEAN_TRUE};
result = (*engineEngine)- CreateAudioPlayer(engineEngine, bqPlayerObject, audioSource,
(cid:180) audioSink, 1, playerIds, playerReq);
if(result != SL_RESULT_SUCCESS) return result;
result = (*bqPlayerObject)- Realize(bqPlayerObject, SL_BOOLEAN_FALSE);
if(result != SL_RESULT_SUCCESS) return result;
result = (*bqPlayerObject)- GetInterface(bqPlayerObject, SL_IID_PLAY, bqPlayerPlay);
if(result != SL_RESULT_SUCCESS) return result;
// pobranie obiektu kolejki bufora odtwarzacza
result = (*bqPlayerObject)- GetInterface(bqPlayerObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE,
(cid:180) bqPlayerBufferQueue);
if(result != SL_RESULT_SUCCESS) return result;
// rejestracja funkcji zwrotnej
result = (*bqPlayerBufferQueue)- RegisterCallback(bqPlayerBufferQueue, bqPlayerCallback,
(cid:180)NULL);
if(result != SL_RESULT_SUCCESS) return result;
return SL_RESULT_SUCCESS;
}
Wszystkie inicjacje w tym kodzie s(cid:200) wykonywane wg jednej podstawowej zasady: najpierw tworzy si(cid:218)
obiekt (np. silnik), a nast(cid:218)pnie si(cid:218) go realizuje. Potem pobiera si(cid:218) interfejs do sterowania tym obiektem.
Kup książkęPoleć książkęRozdzia(cid:225) 11. Zaawansowane aplikacje obs(cid:225)uguj(cid:261)ce audio, wideo oraz kamer(cid:266) 205
W powy(cid:285)szym przyk(cid:239)adzie najpierw zosta(cid:239)y utworzone obiekty silnika i odtwarzacza. Ponadto powsta(cid:239)
obiekt bufora na próbki d(cid:283)wi(cid:218)kowe przeznaczone do odtworzenia. Odtwarzacz jest przystosowany do
odtwarzania 16-bitowego
Pobierz darmowy fragment (pdf)