Sensory rodzaje System przewiduje obsługę 12 rodzajów czujników (sensorów). Można sprawdzić ich dostępność, dokładność, pobór prądu itp. Można odczytać ich wskazania oraz je zarejestrować/wyrejestrować. Niektóre sensory są realizowane programowo. http://developer.android.com/guide/topics/sensors/sensors_overview.html Sensor Type Description Common Uses TYPE_ACCELEROMETER H Measures the acceleration force in m/s 2 that is applied to a device on all three physical axes (x, y, and z), including the force of gravity. Motion detection (shake, tilt, etc.). TYPE_AMBIENT_TEMPERATURE H Measures the ambient room temperature in degrees Celsius Monitoring air ( C). See note below. temperatures. TYPE_GRAVITY S /H Measures the force of gravity in m/s 2 that is applied to a device on all three physical axes (x, y, z). Motion detection (shake, tilt, etc.). TYPE_GYROSCOPE H Measures a device's rate of rotation in rad/s around each of the three physical axes (x, y, and z). Rotation detectio n (spin, turn, etc.). TYPE_LIGHT H Measures the ambient light level (illumination) in lx. Controlling screen brightness. TYPE_LINEAR_ACCELERATION S/H Measures the acceleration force in m/s 2 that is applied to a device on all three physical axes (x, y, and z), excluding the force of gravity. TYPE_MAGNETIC_FIELD H Measures the ambient geomagnetic field for all three physical axes (x, y, z) in μt. Monitoring acceleration along a single axis. Creating a compass. 102 Sensory rodzaje Sensor Type Description Common Uses TYPE_ORIENTATION S Measures degrees of rotation that a device makes around all three physical axes (x, y, z). As of API level 3 you can obtain Determining device position. the inclination matrix and rotation matrix for a device by using the gravity sensor and the geomagnetic field sensor in conjunction with the getrotationmatrix() method. TYPE_PRESSURE H Measures the ambient air pressure in hpa or mbar. Monitoring air pressure changes. TYPE_PROXIMITY H Measures the proximity of an object in cm relative to the view Phone position during a screen of a device. This sensor is typically used to determine call. whether a handset is being held up to a person's ear. TYPE_RELATIVE_HUMIDITY H Measures the relative ambient humidity in percent (%). Monitoring dewpoint, absolute, and relative humidity. TYPE_ROTATION_VECTOR S/H Measures the orientation of a device by providing the three elements of the device's rotation vector. Motion detection and rotation detection. TYPE_TEMPERATURE H Measures the temperature of the device in degrees Celsius ( C). This sensor implementation varies across devices and this sensor was replaced with the TYPE_AMBIENT_TEMPERATURE sensor in API Level 14 Monitoring temperatures. http://developer.android.com/guide/topics/sensors/sensors_overview.html 103 2018 Wszelkie prawa zastrzeżone 1
Sensory klasy SensorManager Zarządza dostępem do serwisu sensorów, ich aktywacją, odczytem danych, tworzy ich listę. Sensor Określa konkretny sensor, jego możliwości, dokładność itp. SensorEvent Zawiera informację o zdarzeniu dotyczącym danego sensora (np. zmiany wartości pola magnetycznego, czasu zmiany itp.) SensorEventListener Interfejs nasłuch zmiany stanu sensora. 104 Sensory dostępność 105 2018 Wszelkie prawa zastrzeżone 2
Sensory użycie Dostęp do serwisu obsługi sensorów Pobranie listy dostępnych sensorów Sprawdzenie dostępności konkretnego sensora 106 Przykład pobranie wskazań oncreate() 107 2018 Wszelkie prawa zastrzeżone 3
Sensory rejestracja i wyrejestrowanie Rejestracja i wyrejestrowanie sensora Szczegółowy opis poszczególnych sensorów: http://developer.android.com/guide/topics/sensors/sensors_overview.html itd. 108 Sensory funkcje Użyteczne funkcje: getdefaultsensor() dostęp do domyślnego sensora konkretnego typu getmindelay() okres pomiaru (kolejnych próbek) w mikrosekundach getvendor(), getversion() producent czujnika i jego wersja getresolution() rozdzielczość wskazań czujnika getmaximumrange() maksymalna wartość wskazań czujnika getpower() ile miliamperów pobiera czujnik 109 2018 Wszelkie prawa zastrzeżone 4
Typy sensorów int TYPE_ACCELEROMETER A constant describing an accelerometer sensor type. int TYPE_ALL A constant describing all sensor types. int TYPE_AMBIENT_TEMPERATURE A constant describing an ambient temperature sensor type. int TYPE_GAME_ROTATION_VECTOR A constant describing an uncalibrated rotation vector sensor type. int TYPE_GEOMAGNETIC_ROTATION_VECTOR A constant describing a geo-magnetic rotation vector. int TYPE_GRAVITY A constant describing a gravity sensor type. int TYPE_GYROSCOPE A constant describing a gyroscope sensor type. int TYPE_GYROSCOPE_UNCALIBRATED A constant describing an uncalibrated gyroscope sensor type. int TYPE_HEART_RATE A constant describing a heart rate monitor. int TYPE_LIGHT A constant describing a light sensor type. int TYPE_LINEAR_ACCELERATION A constant describing a linear acceleration sensor type. int TYPE_MAGNETIC_FIELD A constant describing a magnetic field sensor type. int TYPE_MAGNETIC_FIELD_UNCALIBRATED A constant describing an uncalibrated magnetic field sensor type. int TYPE_ORIENTATION This constant was deprecated in API level 8. usesensormanager.getorientation() instead. int TYPE_PRESSURE A constant describing a pressure sensor type. int TYPE_PROXIMITY A constant describing a proximity sensor type. int TYPE_RELATIVE_HUMIDITY A constant describing a relative humidity sensor type. int TYPE_ROTATION_VECTOR A constant describing a rotation vector sensor type. int TYPE_SIGNIFICANT_MOTION A constant describing a significant motion trigger sensor. int TYPE_STEP_COUNTER A constant describing a step counter sensor. int TYPE_STEP_DETECTOR A constant describing a step detector sensor. int TYPE_TEMPERATURE This constant was deprecated in API level 14. usesensor.type_ambient_temperature instead. 110 Przykład lista sensorów 111 2018 Wszelkie prawa zastrzeżone 5
Przykład Geomagnetic Type HSCD Series 112 Położenie geograficzne/gps 113 2018 Wszelkie prawa zastrzeżone 6
wiki: Public Domain, user El pak Global Positioning System 32 satelity GPS-NAVSTAR (ang. NAVigation Signal Timing And Ranging) system nawigacji satelitarnej, stworzony przez Departament Obrony USA Okresowy sygnał (ok. 1,4 GHz i 1.023 Mbit/s) z zakodowanymi, m.in. czasem, pozycjami satelitów, współczynnikami korekcji i precyzyjnymi danymi (tylko dla wojska itp.). Wspólne częstotliwości nadawania, ale z różne modulacje. Złożone algorytmy dekodowania sygnału. Pozycjonowanie na ziemi: Min. 3-4 widoczne satelity Pomiar długości, szerokości i wysokości n.p.m. wg różnych norm (np. WGS-84 World Geodetic System '84) Pomiar czasu (ns) Inne systemy: GLONASS (Ros), Galileo (UE), Baidou/COMPASS (Chiny), IRNSS (Indie), QZSS (Jap) 114 Położenie geograficzne Sposoby określania położenia geograficznego: Odbiornik GPS w urządzeniu Zależy od widoczności satelitów, ich liczby, pogody itp. Pasywny Sieć komórkowa operatora Zwykle obciąża rachunek za pakiet internetowy, zależy od zasięgu operatora. Pośrednictwo operatora! Sieć internetowa przez WiFi Zależy od zasięgu, mało dokładne, ale działa w budynkach. Pośrednictwo administratora! Dodatkowe API Googla Zautomatyzowany wybór dostawcy położenia (GPS, operator, internet, inne) Optymalizacja zużycia prądu itp. Wsparcie dla obsługi Google Maps Pośrednictwo Googla! 115 2018 Wszelkie prawa zastrzeżone 7
Położenie geograficzne Zastosowanie: Mapy, nawigacja itp. Personalizacja aplikacji pod kątem kraju, miasta itp. Personalizacja reklam w aplikacjach Śledzenie użytkownika, systemy bezpieczeństwa itp. Uprawnienia (AndroidManifest.xml): ACCESS_COURSE_LOCATION mniej dokładne, zwykle na podstawie sieci ACCESS_FINE_LOCATION dokładne, na bazie GPS 116 LocationManager/Provider Głowna klasa: LocationManager Dostęp do serwisu położenia geograficznego LOCATION_SERVICE Zarządza dostawcami położenia (LocationProvider) Interfejs pobierania aktualnego położenia od wybranego dostawcy(-ów) implements LocationListener 117 2018 Wszelkie prawa zastrzeżone 8
Location Parametry położenia geograficznego: Szerokość geograficzna Długość geograficzna Wysokość n.p.m. wiki, Public Domain, user:jaredzimmerman (WMF) Najkrótsza droga (kąt) do celu 118 Aktualizacja Prośba o aktualizację położenia: requestlocationupdates() Jeśli jeszcze/tymczasowo brak połączenia z dostawcą ostatnie znane położenie: getlastknownlocation() Przykładowa strategia doboru najdokładniejszego położenia: 119 2018 Wszelkie prawa zastrzeżone 9
Położenie geograficzne problemy Kiedy zacząć wskazania położenia GPS po starcie? Nie za wcześnie, bo dokładność (liczba satelitów) jest mała Można pobrać ostatnie zapamiętane położenie, ale może być bardzo stare Nie za późno, bo oczekiwanie zużywa baterię Kiedy przerywać aktualizację odczytów? Z oszczędności baterii nie za rzadko Dla dużej dokładności nigdy Najdokładniejsze wyniki Łączenie i automatyczny wybór z kilku dostawców 120 Google Maps Android API Zautomatyzowany dostęp do Google Maps z poziomu aplikacji (kodu źródłowego) Tworzenie własnego interfejsu Dodawanie znaczników, tras, obrazków Rysowanie po mapie 121 2018 Wszelkie prawa zastrzeżone 10
Przykład - definicje 1/4 122 Przykład pobranie położenia 2/4 123 2018 Wszelkie prawa zastrzeżone 11
Przykład reszta funkcji 3/4 konstruktor wyrejestrowanie interfejsu czy GPS działa gettery... 124 MainActivity.class 4/4 125 2018 Wszelkie prawa zastrzeżone 12
Pamięć 126 Pamięć telefonu Ustawienia aplikacji (Preferences / Shared Preferences) podobnie jak rejestry Windows przypisane do konkretnej aplikacji ale mogą być upublicznione dla innej dane zapisane w postaci klucz-wartość Settings: GUI ułatwiające obsługę preferencji Pamięć wewnętrzna (Internal Storage) pliki domyślnie ukryte przed innymi aplikacjami kasowane po wyinstalowaniu aplikacji standardowe funkcje Java do obsługi zapisu/odczytu plików Pamięć zewnętrzna (External Storage), np. karta SD wymagane uprawnienia android.permission.write_external_storage wymagane sprawdzenie, czy pamięć jest dostępna i zapisywalna łatwy dostęp do kilku, z góry zdefiniowanych folderów standardowe funkcje Java do obsługi zapisu/odczytu plików Baza danych (SQLite Databases) baza przypisana do konkretnej aplikacji, dostępna pod zdefiniowaną nazwą 127 2018 Wszelkie prawa zastrzeżone 13
Preferences 128 Preferences / Shared Preferences public abstract SharedPreferences getsharedpreferences (String name, int mode) Wpisy w kilku plikach danych dla jednej aplikacji public SharedPreferences getpreferences (int mode) Wpisy w jednym pliku Odczyt: Zapis: 129 2018 Wszelkie prawa zastrzeżone 14
Przechowanie ustawień w pamięci Pozostaje dorobienie interfejsu graficznego dla użytkownika (pola wyboru itp.) lub zapis tylko z poziomu kodu źródłowego 130 Settings 131 2018 Wszelkie prawa zastrzeżone 15
PreferenceActivity GUI dla preferencji (opcji) programu Dostęp do ustawień systemowych Pola wyboru Podmenu Na bazie SharedPreferences Tworzone w XML Okno uruchamiane przez intencje 132 PreferenceActivity 133 2018 Wszelkie prawa zastrzeżone 16
PreferenceActivity Układ opcji definiowany w XML Wszystkie treści tekstowe też w XML Opcje do wyboru w XML-owych tablicach tekstów Obsługa wpisu/odczytu opcji w kodzie źródłowym 134 Pliki 135 2018 Wszelkie prawa zastrzeżone 17
Pliki Zapis prywatny dla aplikacji Pod konkretną nazwą pliku (name), bez podawania folderu Tryb prywatny, ewentualnie dopisywania, publiczny niezalecany! Zapis publiczny (karta SD, pamięć wewnętrzna) W folderze główny lub folderze publicznym (np. Pobrane) lub w dowolnym, już istniejącym Sprawdzenie dostępu do pamięci SD! Trzeba znać dokładny adres i utworzyć plik (klasa File) samodzielnie Obsługa błędów try-catch!!! 136 Foldery zdefiniowane prywatne public abstract File getcachedir () podaje adres folderu na pliki tymczasowe zapis tylko niewielkich plików, nie ma gwarancji, że system je usunie! public abstract String[] filelist () podaje tablicę nazw plików prywatnych aplikacji public abstract boolean deletefile (String name) usuwa plik prywatny o podanej nazwie public abstract File getdir (String name, int mode) podaje lub tworzy folder na pliki prywatne aplikacji public abstract File getfilesdir() adres folderu zapisu plików prywatnych przez openfileoutput 137 2018 Wszelkie prawa zastrzeżone 18
Przykłady 138 Pamięć zewnętrzna, nie prywatna! 139 2018 Wszelkie prawa zastrzeżone 19
Zasoby zewnętrzne (np. karta SD) sprawdzenie dostępności 140 Foldery zdefiniowane publiczne Wymagane uprawnienia WRITE_EXTERNAL_STORAGE / READ_EXTERNAL_STORAGE Sprawdzić dostęp do pamięci, wyjątki IOException itp. od KitKat-a bez UPRAWNIEŃ: getexternalfilesdir(string) getexternalcachedir() 141 2018 Wszelkie prawa zastrzeżone 20
Przykład 142 Multimedia 144 2018 Wszelkie prawa zastrzeżone 21
Dźwięk (Obraz) Klasy: MediaPlayer odtwarzanie AudioManager zarządzanie Ładowanie medium: bezpośrednio z zasobów z adresu URI (jako obiekt) (Uniform Resource Identifier) W głównym wątku tylko krótkie dźwięki, reszta w osobnym wątku lub serwisie asynchronicznie!!! 145 Asynchroniczne przygotowanie źródła Jeśli źródło dźwięku wymaga: czasochłonnego dekodowania ściągnięcia go z internetu (buforowanie) należy przygotować je poza głównym wątkiem aplikacji! Jeśli dźwięk ma być odtwarzany nieprzerwanie, nawet gdy aplikacja nie jest widoczne należy utworzyć dla niego osobny serwis Szczegóły: http://developer.android.com/guide/topics/media/mediaplayer.html 146 2018 Wszelkie prawa zastrzeżone 22
Formaty danych multimedialnych http://developer.android.com/guide/appendix/media-formats.html Audio: 3GP FLAC MP3 MIDI OGG MKV WAV Video: 3GP MP4 TS ACC WEBM MKV Obraz: JPG GIF PNG BMP WEBP 147 Formaty strumieni danych http://developer.android.com/guide/appendix/media-formats.html 148 2018 Wszelkie prawa zastrzeżone 23
Formaty danych wideo http://developer.android.com/guide/appendix/media-formats.html 149 Uprawnienia powiązane 150 2018 Wszelkie prawa zastrzeżone 24
MediaPlayer - podstawy 151 MediaPlayer Bezpośrednio z zasobów Po adresie URI (Uniform Resource Identifier) dysk lub sieć 152 2018 Wszelkie prawa zastrzeżone 25
Czyszczenie 153 Prosty przykład 154 2018 Wszelkie prawa zastrzeżone 26
Sterowanie 155 Audio focus sterowanie głośnością 156 2018 Wszelkie prawa zastrzeżone 27
Przyciski multimedialne w Manifeście rejestrujemy BroadcastReceiver: a w kodzie sprawdzamy, który klawisz został wciśnięty: 157 Nagrywanie dźwięku 158 2018 Wszelkie prawa zastrzeżone 28
Nagrywanie dźwięku 159 Nagrywanie dźwięku http://developer.android.com/guide/topics/media/audio-capture.html 160 2018 Wszelkie prawa zastrzeżone 29
Wideo 161 Wideo przykład plik_filmu 162 2018 Wszelkie prawa zastrzeżone 30
Test wykładowo-laboratoryjny 163 Media materiały dodatkowe Instrukcja do klasy MediaPlayer: http://developer.android.com/guide/topics/media/mediaplayer.html RingtoneManager: http://developer.android.com/reference/android/media/ringtonemanager.html AudioManager: http://developer.android.com/reference/android/media/ringtonemanager.html Obsługiwane formaty protokołów i plików: http://developer.android.com/guide/appendix/media-formats.html 164 2018 Wszelkie prawa zastrzeżone 31
Fragmenty 165 Fragmenty Część aktywności (graficznego interfejsu użytkownika) Ma własny cykl życia Zawsze zagnieżdżony w aktywności bazowej i jej cyklu życia Może być wielokrotnie używany w danej aktywności 166 2018 Wszelkie prawa zastrzeżone 32
Fragment W ramach danej aktywności fragmenty można: Dodawać Podmieniać Usuwać Podobnie jak komponenty na layoucie. Gdy layout pisano w XML musi zawierać miejsca do umieszczenia fragmentów Gdy layout jest tworzony dynamicznie, z kodu źródłowego miejsca na fragmenty można tworzyć dynamicznie 167 Tworzenie 1 z szablonu Na bazie gotowego szablonu (dość złożonego) 168 2018 Wszelkie prawa zastrzeżone 33
Tworzenie 2 od podstaw Aktywność z fragmentami musi zawierać: Jedną klasę główną (np. MainActivity.class) z layoutem i miejscem na fragmenty lub samymi fragmentami Osobną klasę z layoutem dla fragmentu początkowego Osobną klasę z layoutem dla każdego kolejnego fragmentu Każda klasa fragmentu extends Fragment Przykładowa klasa fragmentu: 169 Layout activity_main.xml 170 2018 Wszelkie prawa zastrzeżone 34
MainActivity replace() podmiana fragmentu addtobackstack() możliwy powrót przez przycisk fizyczny w telefonie 171 Komunikacja 1. Odpowiednie metody get/set 2. Interfejsy do przekazywania zdarzeń i danych 3. Intencje Nigdy nie bezpośrednio pomiędzy fragmentami! Głowna aktywność zawsze jako pośrednik 172 2018 Wszelkie prawa zastrzeżone 35
1. Komunikacja get/set Aktywność (wywołuje metodę statyczną z fragmentu) Fragment Aktywność Fragment 173 Aktywność 2. komunikacja interfejsem Fragment // np. w metodzie On Click przycisku Fragment Aktywność 174 2018 Wszelkie prawa zastrzeżone 36
3. Komunikacja intencjami Aktywność Fragment Aktywność Fragment 175 Efekt 176 2018 Wszelkie prawa zastrzeżone 37
Intencje c.d. 177 Intencje c.d. Intencja służy zwykle do wydania polecenia innej aplikacji Aplikacja odbierze intencję, tylko gdy posiada odpowiedni filtr w AndroidManifest.xml, tzn. potrafi taką intencję obsłużyć Podobnie jak skojarzenia typów plików w Windowsach Przykład: Wysyłanie wiadomości e-mail: Intent intent = new Intent(Intent.ACTION_SEND); // reszta parametrów Obsłużenie wysyłania wiadomości: <intent-filter> <action android:name="android.intent.action.send" /> <data android:type="*/*" /> <category android:name="android.intent.category.default" /> </intent-filter> 178 2018 Wszelkie prawa zastrzeżone 38
Przykłady intencji Utworzenie alarmu (budzika) Uprawnienia: com.android.alarm.permission.set_alarm Odbiór intencji utworzenia alarmu (Intent filter) 179 Utworzenie emaila Przykłady intencji Odbiór intencji wysłania wiadomości email: 180 2018 Wszelkie prawa zastrzeżone 39
Przykłady intencji Otwarcie mapy dla konkretnych współrzędnych Uri.parse("geo:0,0?q=%C5%81%C3%B3d%C5%BA+Stefanowskiego") geo:latitude,longitude np. "geo:47.6,-122.3" geo:latitude,longitude?z=zoom np. "geo:47.6,-122.3?z=11" (z = 1...23) geo:0,0?q=lat,lng(label) np. "geo:0,0?q=34.99,-106.61(treasure)" geo:0,0?q=my+street+address np. "geo:0,0?q=warszawa" Filtr intencji 181 Przykłady intencji Poproszenie o wybranie pliku z pamięci: 182 2018 Wszelkie prawa zastrzeżone 40
Kilka aktywności w jednej aplikacji 183 Kilka aktywności 1. Każda aktywność z osobnym wyglądem.xml (layoutem) i osobną klasą.java 184 2018 Wszelkie prawa zastrzeżone 41
Kilka aktywności 2. Po przygotowaniu widoku i klasy należy dodać wpis w pliku AndroidManifest.xml: 185 Kilka aktywności 3. Uruchamianie nowej aktywności = utworzenie nowej intencji 186 2018 Wszelkie prawa zastrzeżone 42
Kilka aktywności, przekazanie treści 4. Wraz z komunikatem wywołania aktywności można załączyć treść.putextra(<nazwa>, <treść>) 187 Kilka aktywności, przekazanie treści 5. Odebranie treści: pobranie załączonej treści do obiektu Bundle, sprawdzenie czy zawiera załącznik, pobranie treści przez getstring itp. 188 2018 Wszelkie prawa zastrzeżone 43
Przykłady intencji c.d. http://developer.android.com/guide/components/intents-common.html 189 Serwisy 190 2018 Wszelkie prawa zastrzeżone 44
Serwis, jako niezależna aplikacja Serwis z możliwością podłączenia innej aplikacji. Serwisy cykl życia 191 Serwisy kontakt z użytkownikiem Serwisy nie posiadają GUI: komunikacja graficzna z użytkownikiem tylko przez chmurki lub powiadomienia (Notification) http://developer.android.com/guide/topics/ui/notifiers/notifications.html 192 2018 Wszelkie prawa zastrzeżone 45
Serwisy użytkowanie Zastosowanie: gdy potrzeba podprogramu działającego w tle, niezależnie od głównego GUI aplikacji jeśli podprogram ma działać w tle, ale np. na życzenie użytkownika lepie wątki zamiast serwisu, np. AsyncTask Rodzaje serwisów: Service obsługujący równoległe połączenia z zewnątrz IntentService obsługuje żądania przez intencje, po kolei Uruchamianie serwisu: 193 Serwisy systemowe 194 2018 Wszelkie prawa zastrzeżone 46
Serwisy systemowe 195 2018 Wszelkie prawa zastrzeżone 47