Katedra Inżynierii Wiedzy Wykład 1
- laborki Ocena ustalana na podstawie aktywności indywidualnej oraz projektów realizowanych w ramach ćwiczeń. - ocena W ramach ćwiczeń realizowany będzie jeden, lub dwa projekty - będą one podstawą oceny uzyskanej z ćwiczeń. Dodatkowy mniejszy projekt (z naciskiem na aspekt teoretyczny) będzie podstawą zaliczenia wykładu.
Tematyka zajęć Wprowadzenie do aplikacji mobilnych i platformy Android; Program a wersje systemu Android; Środowisko Android Studio; Wygląd aplikacji i podstawy GUI; Wysyłanie wiadomości SMS; Użycie aparatu fotograficznego; Odtwarzanie dźwięku; Odbiór sygnału GPS.
Rysunek: Producenci na rynku. Źródło: opensignal.com/reports/
Rysunek: Urządzenia na rynku. Źródło: opensignal.com/reports/
Rysunek: Wielkość ekranu dostępnych urządzeń. Źródło: opensignal.com/reports/
Rysunek: Wersje systemu. Źródło: https://developer.android.com
Rysunek: Wielkość ekranu. Źródło: https://developer.android.com
Gdzie możemy zarobić na aplikacji? Google Play (koszt wgrania 25 $) - łatwa instalacja, dużo potencjalnych odbiorców; Amazaon App Store (koszt 100 $); SlideMe - za darmo; GetJar - za darmo (w przypadku dwóch ostatnich społeczność, a co za tym idzie liczba pobrań jest mniejsza). Plusem jest mniejsza konkurencja niż w przypadku np. Google Play.
Tworzenie aplikacji dostosowanie środowiska i stworzenie projektu; tworzenie kodu i dodawanie elementów (assety, biblioteki); przełączenie telefonu w tryb programisty; podłączenie telefonu lub emulacja urządzenia; iteracyjnie: uruchomienie, debugowanie i testowanie; przygotowanie aplikacji i publikacja w sklepie (opcjonalnie).
Android API API - Application Programming Interface - kod Java (biblioteki) umożliwiający obsługę dodatkowych elementów takich jak GPS, czy np. akcelerometr, albo: maszyna wirtualna Dalvik; wbudowana przeglądarka bazująca na WebKit; biblioteki umożliwiające wykorzystanie grafiki 2D (własna biblioteka platformy) oraz 3D w oparciu o OpenGL ES 1.0; baza danych SQLite.
Możliwości Android Android różne formaty multimediów (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF); technologie komunikacyjne: GSM, Bluetooth, EDGE, 3G i WiFi; aparat fotograficzny,kamera, kompas, ekran dotykowy, GPS i akcelerometr. Nowy projekt; Dodatkowe elementy - Android API; Android application package (APK) - czyli paczka spakowanych plików (od kodu, po resources takie jak grafika) - kod DEX; APK przekazywane jest do DVM - Dalvik Virtual Machine (wykonanie kodu DEX); DVM to oprogramowanie uruchomione na specjalnej wersji Linux.
Rysunek: Podstawowe komponenty system Android. Źródło: https://nodeclipse.org/
Bardziej szczegółowo Android Kernel = Linux kernel; warstwa abstrakcji sprzętowej (HAL); zarządzanie pamięcią, siecią, zasilaniem, procesami; interfejs HAL - lista sensorów, uruchomienie sensora, częstotliwość próbkowania sensora; czym są sensory? - wirtualne urządzenia dostarczające dane z fizycznych elementów układu: akceleromter, żyroskop, barometr, oświetlenie.
Bardziej szczegółowo - biblioteki natywne język C/C++; silnik przeglądarki internetowej (Webkit); przechowywanie danych (SQLite) - baza danych dostarczana domyślnie z systemem Android; kodeki (Media Framework).
Biblioteki natywne - mechanizmy SQLite SharedPreferences - pary klucz - wartość (np. przechowywanie ustawień); pliki - brak obsługi plików (przechowywanie na karcie pamięci); baza danych - duże ilości uporządkowanych danych.
Rysunek: Struktura projektu
Aplikacje Android brak pojedynczego punktu wejścia (brak funkcji main); aktywność (activity) prezentuje element interfejsu użytkownika (pojedyncze okno); usługi (services) uruchamiane są w tle, najczęściej na nieokreślony z góry okres czasu; odbiorcy transmisji (broadcast receivers) - to komponenty odpowiedzialne za odbiór i reagowanie na komunikaty; aktywności, usługi i odbiorcy transmisji aktywowane są za pomocą asynchronicznych komunikatów zwanych intencjami (intents); intencja jest to obiekt, który przechowuje treść wiadomości. AndroidManifest.xml - główny element, który pozwala Androidowi uruchomić aplikację.
Activity - czynność, czyli pojedynczy ekran czynnosć pokazująca listę wiadomości; czynność umożliwiająca przygotowanie nowej wiadomości; inne aplikacje mogą uruchomić (w ramach swoich uprawnień inne elementy), np. zrobienie zdjęcia powoduje wysłanie maila itp.
Service - usługa odtwarzanie muzyki w tle; pobieranie danych w tle - bez blokowania interakcji użytkownika z aplikacją; usługa nie zapewnie interfejsu użytkownika; inne komponenty (czynności) mogą uruchamiać usługi.
Dostawca zawartości - Content Provider zarządzanie zbiorami danych aplikacji; dzięki dostawcy inne aplikacje mogą uzyskiwać dane lub je modyfikować; dostawca zawartości nie musi być publiczny i można go wykorzystywać do zarządzania danymi prywatnymi. Broadcast receiver -odbiorca rozgłoszeń służy do odbierania komunikatów rozgłoszeniowych. Źródłem komunikatów rozgłoszeniowych może być system (np. wyłączenie ekranu), lub aplikacja (pobranie danych); odbiorca rozgłoszeń nie wyświetla interfejsu użytkownika, ale może tworzyć powiadomienia; dostawca zawartości nie musi być publiczny i można go wykorzystywać do zarządzania danymi prywatnymi.
Android Runtime ograniczone zasoby procesora, pamięci itp.; Dalvik - własna implementacja Java Virtual Machine; Kilka różnic pomiędzy Dalvik a JVM Dalvik operuje na plikach DEX; Dalvik to register-based virtual machine (w odróżnieniu od stack-based virtual machine JVM. W drugim przypadku operacje realizowane są z wykorzystaniem stosu - komendy PUSH oraz POP; natomiast w pierwszym przypadku bazujemy na rejestrach); inny zestaw bibliotek niż w przypadku JDK.
Application Framework zarządzanie cyklem życia aplikacji (o tym za chwilę); zarządzanie GUI; zarządzanie udostępnianiem danych pomiędzy aplikacjami (kiedy chcemy, aby złożone dane lub pliki były dostępne dla innych aplikacji; kiedy chcemy udostępnić możliwość kopiowania tych elementów).
Android - czas życia aplikacji stworzenie (kliknięcie ikony aplikacji); uruchomienie (zaraz po stworzeniu); wznowienie (aplikacja zaraz po uruchomieniu jest wznawiana); działanie; pauza; zatrzymanie; zniszczenie. Każda aktywność ma swój własny cykl.
Rysunek: Aplikacja i widgety Aplikacja i widgety najwyżej położona warstwa zawierająca aplikacje oraz widgety; aplikacje to programy działające na pełnym ekranie; widgety to aplikacje wykorzystujące fragment (prostokątną część ekranu).
Uprawnienia (do wersji Marshmallow) dodajemy niebezpieczny element (np. pobieranie sygnału GPS); dodajemy informację do pliku Manifest; przy pobieraniu aplikacji zezwalamy na użycie tej funkcji; potencjalnie niebezpieczny kod: dodajemy funkcję, która nie jest konieczna w aplikacji, ale najczęściej użytkownik i tak ją zaakceptuje. Uprawnienia (od wersji Marshmallow) od wersji Marshmallow pytanie o uprawnienia zadawane jest dla każdej cechy osobno; możemy zatem zablokować dostęp do książki adresowej, ale zezwolić na inną funkcję.
Coś więcej o pliku Manifest definicje komponentów; pozwolenia, które powinny być uzyskane od użytkownika; deklaracje minimalnego API; deklaracje wymaganych zasobów sprzętowych; biblioteki, które powinny być dołączone (poza tymi z Android API).
Plik strings.xml i zasoby tworzenie aplikacji wielojęzycznych; ciągi znaków (jak np. opis przycisku) nie powinny być wpisane jako stałe w pliku layout.xml; korzystanie z informacji z pliku strings.xml umożliwi przygotowanie wersji dedykowanych dla różnych języków Rysunek: Struktura katalogów dla plikow strings.xml
Rysunek: Widgety w środowisku Android
Właściwości Widgetów wysokość, szerokość, czcionka; wielkość elementu - match (dopasowanie do elementu rodzica); padding - margines wewnętrzny między ramką a obiektem (dlatego najpierw umieszczamy elementy wewnętrz pojemnika np. layout, a dopiero potem padding); margin - margines zewnętrzny pomiędzy ramką a sąsiednimi obiektami.
Podstawy GUI View - prosty komponent; View group - layout (grupua). Rysunek: GUI - ekran Activity
Rysunek: GUI - plik XML
View groups - LinearLayout i RelativeLayout układ w poziomie; układ w pionie; układ ustalany na podstawie parametru: android:orientation. View groups - RelativeLayout układ w odniesieniu do rodzica - np. Container; odniesienie: Bottom Parent, Top Parent, (left, right, center); położenie elementów w odniesieniu do innyc elementów;
View groups - waga ustalając LinearLayout i zmieniając wielkość danej kontrolki View na wartość 0 możemy przypisać jej wagę; waga oznacza, jaką częśc widoku będzie zajmować dany View; Przykładowo: 3 elementy, każdy z wagą 1 oznaczają, iż poszczególne elementy będą rozmieszczone na ekranie równomiernie.
Jak zapewnić sobie wsparcie dla różnych urządzeń? rozmiary w postaci dip (px = dp ( dip 160 )); dla tekstów używamy sp; < supports screens > - wskazujemy, jakie rozmiary ekranu są wspierane; dostarczamy różne elementy resources (dla różnych ekranów); stosujemy różne layout.
dpi, dip, dp, dps, sp? dpi - dots per inch (kropki na cal) - 160 (w przypadku ekranu o niższej rozdzielczości), lub 240 (w przypadku ekranu o większej rozdzielczości); pixels = dpi razy szerokość (1.5 cala), a więc odpowiednio 240 lub 360 pikseli; gęstość - 1.0 - dla ekranów o niższej rozdzielczości oraz 1.5 dla większej rozdzielczości; Denisity-independent pixels (dip,dp, dps) - 240; scale-independent pixels - zależy od ustawień dotyczących czcionki.
Rysunek: Więcej szczegółów. Źródło: stackoverflow.com
Krótko o Javie typy proste; typy referencyje; deklaracja zmiennych; instrukcje sterujące; rzutowanie; metody i zwracane typy; zasięg zmiennych; obiekty i dziedziczenie; interfejsy.
Co dobrze będzie znać? podstawy klas i obiektów; dziedziczenie (większość komponentów dziedziczy po innych elementach); podstawy liczb losowych (pseudolosowych); tablice statyczne (oraz dynamiczne);
Komponenty a intencje czynności, usługi oraz odbiorcy rozgłoszeń tworzeni są za pomocą intencji (intent); konieczne jest wcześniejsze utworzenie obiektu Intent, który będzie zawierał dane przekazywane wskazanemu komponentowi; intencja wiąże komponenty (niezależnie od tego, czy inny komponent należy do uruchamiającej aplikacji, czy innej). Jeszcze intencje Czynność za pomocą startactivity() lub startactivityforresult(); Usługa za pomocą startservice() (lub jeżeli chcemy powiązać się z usługą za pomocą bindservice()); Rozgłoszenie za pomocą sendbroadcast(), sendorderedbroadcast() lub sendstickybroadcast(); Dostawca zawartości można go odpytywać za pomocą metody query() na obiekcie ContentResolver.
Cechy intencji akcja - ogólna akcja, która ma zostać wykonana (ACTION VIEW, ACTION EDIT); dane - informacje, które mają zostać przekazane komponentowi (np. dane adresowe); kategoria - informacje dodatkowe; typ MIME danych (identyfikator formatu plików) składający się z typu oraz podtypu (przetwarzania wiadomości e-mail); komponent; dodatki.
Zasoby wygląd, układ iz zachowanie interfejsu użytkownika; parametry takie jak rozmiar ekranu, język, orientacja ekranu; zasoby typu drawable, animacje, ikony aplikaci.
The Draw 9-patch tool - tworzenie elementów GUI 9 części obrazy (np. przyciski) ze specjalnym rodzajem skalowania; określenie wyglądu obramowań; używane do android:background; cały obrazek podzielony jest na 9 obszarów. 4 narożniki - statyczne; 4 obszary pomiędzy narożnikami - powielane w jednym wymiarze (na szerokość, lub na wysokość); środek - skalowalny.
Bardziej złożone struktury więcej elementów niż 9; możliwe skalowanie tylko poziomo, lub tylko pionowo; wybrane fragmenty ramki mogą być stale. Rysunek: Przykład ramki
Rysunek: Stany przycisków Interaktywność kontrolek interaktywność kontrolek; osobne grafiki dla poszczególnych stanów przycisku; nie mamy Listenera do przycisku.
Stany kontrolek android:state enabled czy element jest aktywny; android:state focused czy element ma fokus; android:state pressed czy element jest wciśnięty; android:state checked czy element jest wybrany.
Na koniec o powiadomieniach Toast - interaktywność (brak) - Krótko widoczne informacje wyświetlane domyślnie pośrodku dolnej części ekranu. Pasek stanu - interaktywność (mała) - Zdarzenia oczekujące akcji użytkownika (np. powiadomienie o sms, albo o e-mailu); Okno dialogowe - interaktywność (duża).
Dziękuję za uwagę